欢迎来到天天文库
浏览记录
ID:47204816
大小:556.95 KB
页数:13页
时间:2019-08-26
《操作系统实验四主存空间的分配回收-首次适应算法和循环首次适应算法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、.实验报告【实验名称】首次适应算法和循环首次适应算法【实验目的】理解在连续分区动态的存储管理方式下,如何实现主存空间的分配与回收。【实验原理】首次适应(firstfit,FF)算法FF算法要求空闲分区链以地址递增的次序链接。在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区即可。然后再按照作业的大小,从该分区中划出一块内存空间,分配给请求者,余下的空闲分区仍留在空闲链中。若从链首直至链尾都不能找到一个能满足要求的分区,则表明系统中已经没有足够大的内存分配给该进程,内存分配失败,返回。循环首次适应(nextfit,NF)算法为避免低址部分留下许多很小的空闲分区,以及
2、减少查找可用空闲分区的开销,循环首次适应算法在为进程分配内存空间时,不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块玉请求大小相等的内存空间分配给作业。【实验内容】实现主存空间的分配与回收:1.采用可变式分区管理,使用首次适应算法实现主存空间的分配与回收;2.采用可变式分区管理,使用循环首次适应算法实现主存空间的分配与回收。数据结构和符号说明:typedefstructPCB//进程控制块{charProgressName[10];//进程名称..intStartaddress;//进程开始地址intProg
3、ressSize;//进程大小intProgressState=0;//进程状态};typedefstructFREE//空闲区结构体{intFree_num;//空闲区名称intStartaddress;//空闲区开始地址intEndaddress;//空闲区结束地址intFree_Space;//空闲区大小};算法流程图:首次适应算法循环首次适应算法..程序代码及截图:#include#include#include#include#defineN1024typedefstructPCB//进程控制块{char
4、ProgressName[10];//进程名称intStartaddress;//进程开始地址intProgressSize;//进程大小intProgressState=0;//进程状态};typedefstructFREE//空闲区结构体{intFree_num;//空闲区名称intStartaddress;//空闲区开始地址intEndaddress;//空闲区结束地址intFree_Space;//空闲区大小};intcount=0;//当前内存中进程个数..boolROM[N];//设置内存块intp=0;//循环首次使用需要标记当前的空闲区块FREEFREE[100];/
5、/设置空闲区数组为100个intFREE_counter=0;//空闲区的个数PCBnum[20];//作业队列voidinit()//初始化操作{for(inti=0;i6、---------------------------------------");for(inti=0;inum[j+1].Startaddress){a=num[j];num[j]=num[j+1];num[j+1]=a;}for(inti=0;i7、rtaddress,num[i].ProgressSize,num[i].ProgressSize+num[i].Startaddress-1);printf("----------------------------------------------------------------------");}voidshowFree()//打印空闲区的情况{printf("----------------------------------------
6、---------------------------------------");for(inti=0;inum[j+1].Startaddress){a=num[j];num[j]=num[j+1];num[j+1]=a;}for(inti=0;i7、rtaddress,num[i].ProgressSize,num[i].ProgressSize+num[i].Startaddress-1);printf("----------------------------------------------------------------------");}voidshowFree()//打印空闲区的情况{printf("----------------------------------------
7、rtaddress,num[i].ProgressSize,num[i].ProgressSize+num[i].Startaddress-1);printf("----------------------------------------------------------------------");}voidshowFree()//打印空闲区的情况{printf("----------------------------------------
此文档下载收益归作者所有