1 / 11
文档名称:

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

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

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

分享

预览

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

上传人:漫山花海 2019/6/15 文件大小:34 KB

下载得到文件列表

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

文档介绍

文档介绍:Forpersonaluseonlyinstudyandresearch;mercialuse薆存储管理上机作业——最佳适应算法肈以最佳适应为例,给出可变式分区的分配回收算法。节源程序如下:膀#include<>芈#defineN5袆structfreearea莂{薀 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++)//检测是否与某空闲块的低地址相接膂{莈 if(s+l==freeblock[i].startaddress&&freeblock[i].state==1)芇{肄 freeblock[i].startaddress=s;荿 freeblock[i].size=freeblock[i].size+l;肀 tag3=1;肆 break;膄}螀 if(tag3==0)//不与任何空闲块相接薈 {螅 for(j=0;j<N;j++)芃{膁 if(freeblock[j].state==0)芀{薄 freeblock[j].startaddress=s;芃 freeblock[j].size=l;薂 freeblock[j].state=1;蚈 break;薇}莃}虿 }莀 }莆}蒃}肀voidadjust()袇{膅 inti,j;薃 structfreeareatemp;蒁 for(i=0;i<N;i++)蕿 {*** for(j=i;j<N;j++)蚃{袁 if(freeblock[i].size>freeblock[j].size)肇{羆 =freeblock[i].size;