欢迎来到天天文库
浏览记录
ID:39569743
大小:131.50 KB
页数:11页
时间:2019-07-06
《内存分配,首次适应算法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验报告一、实验名称:内存分配与回收二、实验内容:用首次适应算法实现存储空间的分配,回收作业所占用的存储空间。三、实验目的:一个好的计算机系统不仅要有足够的存储容量,较高的存取速度和稳定可靠的存储器,而且能够合理的分配和使用这些主存空间。当用户提出申请主存空间的要求时,存储管理能够按照一定的策略分析主存的使用情况,找出足够的空间分配给申请者;当作业运行完毕,存储管理要回收作业占用的主存空间。本实验实现在可变分区存储管理方式下,采用最先适应算法对主存空间进行分配和回收,以加深了解操作系统的存储管理功能。 四、实验过程:a)基本思想空闲分区链以地址递增的次序连接。
2、在分配内存时,从链首开始顺序查找,直至找到一个大小能够满足要求的空闲分区为止;然后再按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍然留在空闲链中。若从链首直至链尾都不能找到一个能满足要求的分区,则此次内存分配失败。b)主要数据结构typedefstructFreeLink{//空闲链structFreeLink*prior;charname;intstart;intsize;boolflag;structFreeLink*next;}*ptr,*head;headtop;ptrp;c)内存分配算法当有进程要求分配主存时,依据首次适应算法
3、从链头开始,延链查找一个足以容纳该进程的空闲区。若这个分区比较大,则一分为二,一部分分配给进程,另一部分作为空闲区仍留在链中的当前位置,修改它的上一个空闲区的前向指针值为再加上分配给进程的分区大小,下一个空闲区的后向指针值为再加上分配给进程的分区大小,使链保持完整。若这个分区的大小正好等于进程的大小,该分区全部分配给进程,并将该空闲区从链中摘除(即修改下一个空闲区的后向指针=该空闲区后向指针,上一个空闲区的前向指针=该空闲区的前向指针)。再在已分配区表中找一个空表目,登记刚刚分配的内存始址、长度和进程号。d)内存的回收当进程运行完成,释放内存时,通过输入进程号
4、,来回收进程占用的分区。在回收时,释放区与空闲区相邻接的情况要考虑4种情况:⊙释放区下邻空闲区⊙释放区上邻空闲区⊙释放区与上下空闲区均相邻⊙释放区与上下空闲区均不相邻e)程序流程图※空闲链的首次适应算法分配流程图开始申请xkb内存由链头找到第一个空闲区分区大小≥xkb?大于分区大小=分区大小-xkb,修改下一个空闲区的后向指针内容为(后向指针)+xkb;修改上一个空闲区的前向指针为(前向指针)+xkb将该空闲区从链中摘除:修改下一个空闲区的后向地址=该空闲区后向地址,修改上一个空闲区的前向指针为该空闲区的前向指针等于小于延链查找下一个空闲区到链尾了?作业等待返
5、回是否登记已分配表返回分配给进程的内存首地址※空闲链的首次适应算法回收流程图开始输入完成进程的标号在分配区表中查找释放区p下邻分区空闲区前一个空闲区的后向指针指向p的后一个分区,p的后一个分区的前向指针指向p的前一个分区,且p的前一个分区大小更改为加上p的大小,释放p释放区p上邻分区空前一个分区的后向指针指向p的后一个空闲分区,p的后一个空闲分区的前向指针指向p的前一个分区,且p的后一个分区大小更改为加上p的大小释放区p上下均邻空闲区前一个空闲区的后向指针指向p的后一个空闲分区,p的后一个空闲分区的前向指针指向p的前一个空闲分区,且p的前一个空闲分区大小更改为
6、加上p的大小再加上p的后一个空闲分区的大小,合并后的这个空闲区的后向指针指向p的下下个分区,如果p的下下个分区不为空,则其前向指针指向合并后的这个空闲区,释放p和p的下一个分区释放区p上下均不邻空闲区将p放在链首,并修改其状态位为空闲f)截屏五、源代码#include#include#includeusingnamespacestd;typedefstructFreeLink{//定义空闲链structFreeLink*prior;charname;intstart;intsize;boolflag
7、;structFreeLink*next;}*ptr,*head;headtop;ptrp;voidprint(){//将内存分配情况打印到屏幕上p=top;cout<<"************************内存分配情况表************************"<name<<"tt"<start<<"tt"<size<<"tt";if(p->flag==false)//fla
8、g为false,表明该分区空闲{cou
此文档下载收益归作者所有