1 / 6
文档名称:

操作系统存储器管理——最佳适应算法.doc

格式:doc   大小:26KB   页数:6页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

操作系统存储器管理——最佳适应算法.doc

上传人:小枷 2019/2/13 文件大小:26 KB

下载得到文件列表

操作系统存储器管理——最佳适应算法.doc

文档介绍

文档介绍:存储管理上机作业——最佳适应算法以最佳适应为例,给出可变式分区的分配回收算法。源程序如下:#include<>#defineN5structfreearea{ intstartaddress; intsize; intstate;}freeblock[N]={{20,20,1},{80,30,1},{160,10,1},{200,40,0},{250,50,1}};intallocate(intapplyarea){ inti,tag=0; for(i=0;i<N;i++) { if(freeblock[i].size>applyarea&&freeblock[i].state==1) { freeblock[i].startaddress=freeblock[i].startaddress+applyarea; freeblock[i].size=freeblock[i].size-applyarea; tag=1;//有满足条件的分区时,tag置1 returnfreeblock[i].startaddress-applyarea; } elseif(freeblock[i].size==applyarea&&freeblock[i].state==1) { freeblock[i].state=0; tag=1;//有满足条件的分区时,tag置1 returnfreeblock[i].startaddress; } } if(tag==0) return-1;}voidset_free(){ inti,j,s,l,tag1=0,tag2=0,tag3=0; printf("pleaseinputthestartaddressyouwanttosetfree:\n"); scanf("%d",&s); printf("pleaseinputthesize:\n"); scanf("%d",&l); for(i=0;i<N;i++) { if(freeblock[i].startaddress+freeblock[i].size==s&&freeblock[i].state==1)//释放区与某一空闲块的高地址相邻接{ l=freeblock[i].size+l; tag1=1;//释放区与某一空闲块的高地址相邻接 for(j=0;j<N;j++)//内层循环用于检测释放区是否同时与两个空闲块相邻接{ if(freeblock[j].startaddress==freeblock[i].startaddress+l&&freeblock[j].state==1) { freeblock[j].size=l+freeblock[j].size; freeblock[j].startaddress=freeblock[i].startaddress; freeblock[i].state=0; tag2=1;//标记同时与两个空闲块相接 break; } } if(tag2==0) { freeblock[i].startaddress=s; freeblock[i].size=l; break; } } }//for if(tag1==0)//不与空闲块的高地址相接 { for(i=0;i<N;i++)//检测是否与某空闲块的低地址相接