预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

操作系统实验四主存空间分配与回收首次适应算法和循环首次适应算法HYPERLINK"https://m.zqwdw.com/gongzuozongjie/2020/1204/1046919.html"实验报告【实验名称】首次适应算法和循环首次适应算法【实验目的】理解在连续分区动态的存储管理方式下,如何实现主存空间的分配与回收。【实验原理】首次适应(firstfit,FF)算法FF算法要求空闲分区链以地址递增的次序链接。在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区即可。然后再按照作业的大小,从该分区中划出一块内存空间,分配给请求者,余下的空闲分区仍留在空闲链中。若从链首直至链尾都不能找到一个能满足要求的分区,则表明系统中已经没有足够大的内存分配给该进程,内存分配失败,返回。循环首次适应(nextfit,NF)算法为避免低址部分留下许多很小的空闲分区,以及减少查找可用空闲分区的开销,循环首次适应算法在为进程分配内存空间时,不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块玉请求大小相等的内存空间分配给作业。【实验内容】实现主存空间的分配与回收:1.采用可变式分区管理,使用首次适应算法实现主存空间的分配与回收;2.采用可变式分区管理,使用循环首次适应算法实现主存空间的分配与回收。数据结构和符号说明:typedefstructPCB//进程控制块{charProgressName[10];//进程名称intStartaddress;//进程开始地址intProgressSize;//进程大小intProgressState=0;//进程状态};typedefstructFREE//空闲区结构体{intFree_num;//空闲区名称intStartaddress;//空闲区开始地址intEndaddress;//空闲区结束地址intFree_Space;//空闲区大小};算法流程图:首次适应算法循环首次适应算法程序代码及截图:#include<stdio.h>#include<string.h>#include<stdlib.h>#include<io.h>#defineN1024typedefstructPCB//进程控制块{charProgressName[10];//进程名称intStartaddress;//进程开始地址intProgressSize;//进程大小intProgressState=0;//进程状态};typedefstructFREE//空闲区结构体{intFree_num;//空闲区名称intStartaddress;//空闲区开始地址intEndaddress;//空闲区结束地址intFree_Space;//空闲区大小};intcount=0;//当前内存中进程个数boolROM[N];//设置内存块intp=0;//循环首次使用需要标记当前的空闲区块FREEFREE[100];//设置空闲区数组为100个intFREE_counter=0;//空闲区的个数PCBnum[20];//作业队列voidinit()//初始化操作{for(inti=0;i<N;i++)ROM[i]=0;}voidshowProgress(PCB&a){printf(“----------------------------------------------------------------------\n“);printf(“进程名\t\t开始地址\t\t大小\t\t结束地址\n“);//输出内存信息printf(“----------------------------------------------------------------------\n“);for(inti=0;i<count-1;i++)for(intj=i;j<count-1;j++)if(num[j].Startaddress>num[j+1].Startaddress){a=num[j];num[j]=num[j+1];num[j+1]=a;}for(inti=0;i<count;i++)if(num[i].ProgressState!=0)printf(“%s\t\t%d\t\t\t%d\t\t%d\t\t\n“,num[i].ProgressName,num[i].Startaddress,num[i].ProgressSize,num[i].ProgressSize+num[i].Startaddress-1);printf(“------------------------------------------------------