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