下载此文档

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


文档分类:IT计算机 | 页数:约8页 举报非法文档有奖
1/8
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/8 下载此文档
文档列表 文档介绍
存储管理上机作业——最佳适应算法
以最佳适应为例,给出可变式分区的分配回收算法。
源程序如下:
#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;

操作系统存储器管理——最佳适应算法 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数8
  • 收藏数0 收藏
  • 顶次数0
  • 上传人endfrs
  • 文件大小91 KB
  • 时间2017-12-07