采用首次适应算法的动态分区分配模拟课程设计实验报告.doc_第1页
采用首次适应算法的动态分区分配模拟课程设计实验报告.doc_第2页
采用首次适应算法的动态分区分配模拟课程设计实验报告.doc_第3页
采用首次适应算法的动态分区分配模拟课程设计实验报告.doc_第4页
采用首次适应算法的动态分区分配模拟课程设计实验报告.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 需求分析1)本程序要求实现对内存的动态分配与回收的模拟,同时,在内存的分配时还必须使用首次适应算法,最后,还要显示内存块分配和回收后空闲内存分区链的情况。2)要实现对作业的内存分配,首先要有一个对作业进行创建和分配内存的模块,其中,该模块在分配内存时要使用首次适应算法;要实现对内存的回收,要有一个内存回收的模块,其中,该模块在回收内存时要考虑内存回收的四种情况;最后,还要有一个能显示内存空闲分区链的情况的模块。2 概要设计1)首次适应算法的结构如图1:图1 首次适应算法的结构图从链首开始顺序查找空闲分区链完否?返 回分区大小所需大小?分区大小-所需大小next=new Fq;head-next-size=MAXSIZE;head-next-o=0;head-next-next=NULL;int choice=0;docout请选择你要进行的操作:endl;cout1、创建新作业 2、查看空闲分区链 3、回收内存空间 0、退出choice;switch(choice)case 1: create(head);break;case 2: cha(head);break;case 3: hui(head);break;case 0: break; default: cout输入错误!next;p-before=head;int no=0,b=0;coutno;coutb;alloc(b,no,p); /此处调用功能函数alloc()查看空闲分区链模块:void cha(Fq *head)/查看内存中的空闲分区链的子函数Fq *p=head-next;p-before=head;int i=0;cout空闲分区链的情况为:o=0)cout空闲分区+i sizeKnext;回收内存空间模块:void hui(Fq *head)/回收内存的子函数Fq *p=head-next;p-before=head;int no=0;coutno;while(p!=NULL)if(p-no=no)free(p); /此处调用功能函数free()cout作业no的内存已回收!next;内存分配功能函数模块:void alloc(int b,int no,Fq *p)/对作业no进行内存分配的子函数while(p!=NULL)if(p-o=1) p=p-next;elseif(p-sizeb)if(p-size-bo=1;p-no=no;elseFq *q=new Fq;Fq *r;r=p-before;r-next=q;q-before=r;q-next=p;p-before=q;q-size=b;p-size=p-size-b;q-no=no;q-o=1;cout内存分配成功!next;cout内存分配失败!before-o=0&c-next-o=0)Fq *r=c-before,*s=c-next-next;r-size=(r-size+c-size+c-next-size);r-next=s;if(s!=NULL) s-before=r;if(c-before-o=0&c-next-o!=0) c-before-size=c-before-size+c-size;c-before-next=c-next;c-next-before=c-before;if(c-next-o=0&c-before-o!=0)Fq *r=c-next-next;c-size=c-size+c-next-size;c-next=c-next-next;if(r!=NULL) r-before=c;c-o=0;else c-o=0;6 调试分析1)内存分配功能函数模块:刚开始对作业分配内存时,只是将空闲分区的大小以及前后向指针进行修改,而没有对分配给作业的内存进行设置;这样,尽管内存的空闲分区大小已经变小,但是,以后却无法对已分配的内存空间以及作业进行修改;于是,我经过思考后,决定将分配给作业的内存空间也设置为一个分区,只不过不是空闲的分区,通过状态标识符o来与空闲分区进行区别。2)回收内存空间模块:刚开始编写此模块的代码时,我有一种无从下手的感觉;因为,如果要回收某个作业的内存,那么必须知道该作业所在的内存中的位置;但是,刚开始我用的数据结构中只有表示内存状态的属性(分区可用空间大小,状态标识符,前后向指针),这样就不能对特定的作业进行操作;最后,我经过思考决定在内存的数据结构中增加一项,即作业标识符,用来保存分区中的作业信息,从而达到查找特定作业所在内存分区的目的。3)在编写代码的过程中,我还遇到了一些小的问题;比如,对链表进行操作时,老是出现错误,不能对链表进行正确的操作等;这些问题与我对链表的认识不够深入和准确有关,不过,通过这次程序的编写,进一步加深了我对链表的理解,对链表的运用也变得得心应手了。7 测试结果1)测试数据:作业1申请130KB;作业2申请60KB;作业3申请100KB;作业2释放60KB;作业4申请200

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论