动态分区管理实验报告_第1页
动态分区管理实验报告_第2页
动态分区管理实验报告_第3页
动态分区管理实验报告_第4页
动态分区管理实验报告_第5页
全文预览已结束

下载本文档

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

文档简介

实验五动态分区管理模拟实验报告关键问题:写一动态分区管理程序,使其内存分配采用最优适应分配算法。设计思路:在空闲分区链中找最适合的空闲块,使内存碎片尽量的减少!根据最佳适应算法原理,在内存分配函数ffallocation()中,增加记录适合空白块的标记sp,然后拿当前空白块fp减去后jl的后的大小和它后面的另一空白块sp减去jl的大小相比较。如果前者大于后者,且后者的空白区大于jl的大小,则当前空白块为sp,否则继续往后比较,直到空闲分区链末尾!则当前空白块为最适合的空白块!然后就把当前空白块分配给作业。其他部分的代码与实例相同!实现的关键代码:// 〃有两个链:空白块链及作业链.空白块链描述空白块,链首指针freep,初始为一大块空白块.//作业链按从高址到低址的顺序链接,链首指针jobp//为作业jn分配jl大小内存,起始地址为javoidffallocation(intjl,charjn[10],int*ja)(mat*jp二NULL;//作业链当前节点mat*jp2=NULL;//新的作业节点mat*jp1=NULL;//freearea*fp=NULL;//当前空白块// 修改部分freearea*sp;//记录适合的空白块inti;*ja=-1;if(totalfree<jl)//剩余空间大小不能满足作业要求return;*ja=0;fp二freep;//取空白块链首块,将顺着链寻找第一块满足作业要求的块。sp二freep;while(fp!=NULL)(if(fp->freesize<jl)(fp=fp->next;//当前空白块大小不满足要求sp=sp->next;}else〃将当前空白块分配给作业(/*当当前空白块fp与它的下一块空白块sp相比较,如果它减去jl后大于下一空白块sp减去jl,且下一空白块sp大于等于jl,则当前空白块为sp;否则sp继续往后查找,直到空闲块查找完毕,然后当前空闲块为所要查找的适合空闲块!*/while(sp!=NULL)(if((fp->freesize-jl>sp->freesize-jl)&(sp->freesize>=jl))(fp=sp;}else(sp=sp->next;}}//jobnumber++;totalfree二totalfree-jl;jp2=newmat;//申请一块作业节点空间〃在节点上登记为该作业分配的内存空间//for(i=0;i<10;i++)(jp2->jobname)[i]=’’;i=-1;while(jn[++i])(jp2->jobname)[i]=jn[i];(jp2->jobname)[i]='\0';jp2->joblength=jl;jp2->jobaddress=fp->freeaddress;//登记该作业的起始地址*ja=jp2->jobaddress;//将节点jp2插入作业链jobp,按高址到低址的顺序。if(jobp==NULL)(//插入链首jp2->next=NULL;jp2->back=NULL;jobp二jp2;}else(jp二jobp;//取链首指针while((jp!二NULL)&&(jp2->jobaddress<jp->jobaddress))(jp1=jp;//jp1为jp的前一个节点jp=jp->next;//继续搜索}〃将jp2插入到[?1之后、jp之前jp2->next=jp;if(jp==NULL)(〃插到链尾jp2->back=jp1;jp1->next=jp2;}else(//插在链中间jp2->back=jp->back;if(jp->back!=NULL)//jp不是首节点jp1->next=jp2;elsejobp=jp2;//jp是首节点jp->back=jp2;}}//if(jobp==NULL)〃剩余空白块处理if(fp->freesize-jl<min)//剩余空间小于最小量,碎片(//抛弃碎片fpif(fp->next!二NULL)(fp->next)->back=fp->back;//fp非尾节点if(fp->back!=NULL)(fp->back)->next=fp->next;//fp非首节点elsefreep=fp->next;//fp为首节点}else(〃登记余下空白块fp:节点链指针不变,调整块的大小及地址fp->freesize=fp->freesize-jl;fp->freeaddress=fp->freeaddress+jl;//分配空白块前半部分}return;}//else//将当前空白块分配给作业

}//while(fp!=NULL)}// 程序运行结果:a"C;\W:6.0-十十+\DeLuy\实垫5上耳£作业名长度起始址址8 370 409SA 24R 拓4可4 朋口 抽丽2 4»^1 232^剩合总空'可=辨弱选择功能;1分配2回收卜内存分配状况』退出鬲输入乍业名字:88请输入作业人小:380SI"C:\VC6.0-+++\Debug\宴会5.已职"选择动能:分配2-回收3-内存分配状况请输入乍业名字:884-退出请输入乍业大小:SI"C:\VC6.0-+++\Debug\宴会5.已职"选择动能:分配2-回收3-内存分配状况请输入乍业名字:884-退出请输入乍业大小:300作业名长度8 3708B剩会430

空'司=349©起始址址409S37803546303S232Q迷择功能,1一分配帛输入作业名字:请输入作业大小:作业名88B64892W一回检科内存今配片况4-退出89250长度37030024S2962弱49Q起始弛址409@3780354Q30362720232S剩会总空'司=32邻4-退出选择动能,分配2-回收34-退出TOC\o"1-5"\h\z8 370 409S8B 3Q0 37806 246 35464 29S 303SR9 WEM 2720

温馨提示

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

评论

0/150

提交评论