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