1 / 8
文档名称:

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

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

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

分享

预览

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

上传人:endfrs 2017/12/7 文件大小:91 KB

下载得到文件列表

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

文档介绍

文档介绍:存储管理上机作业——最佳适应算法
以最佳适应为例,给出可变式分区的分配回收算法。
源程序如下:
#include<>
#define N 5
struct freearea
{
int startaddress;
int size;
int state;
}freeblock[N]={{20,20,1},{80,30,1},{160,10,1},{200,40,0},{250,50,1}};
int allocate(int applyarea)
{
int i,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
return freeblock[i].startaddress-applyarea;
}
else if(freeblock[i].size==applyarea&&freeblock[i].state==1)
{
freeblock[i].state=0;
tag=1;//有满足条件的分区时,tag置1
return freeblock[i].startaddress;
}
}
if(tag==0)
return -1;
}
void set_free()
{
int i,j,s,l,tag1=0,tag2=0,tag3=0;
printf("please input the start address you want to set free:\n");
scanf("%d",&s);
printf("please input the size:\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;