1 / 13
文档名称:

内存分配,首次适应算法.doc

格式:doc   大小:105KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

内存分配,首次适应算法.doc

上传人:beny00001 2021/12/8 文件大小:105 KB

下载得到文件列表

内存分配,首次适应算法.doc

文档介绍

文档介绍:word
word
1 / 13
word
实 验 报 告
word
word
3 / 13
word
实验名称:存分配与回收
二、 实验容:用首次适应算法实现存储空间的分配,回收作业所占用的存储空间。
三、 实验目的:
一个好的计算机系统不仅要有足够的存储容量,较高的存取速度和稳定可靠的存储器,而且能够合理的分配和使用这些主存空间。当用户提出申请主存空间的要求时,存储管理能够按照一定的策略分析主存的使用情况,找出足够的空间分配给申请者;当作业运行完毕,存储管理要回收作业占用的主存空间。本实验实现在可变分区存储管理方式下,采用最先适应算法对主存空间进展分配和回收,以加深了解操作系统的存储管理功能。 
实验过程:
根本思想
空闲分区链以地址递增的次序连接。在分配存时,从链首开始顺序查找,直至找到一个大小能够满足要求的空闲分区为止;然后再按照作业大小,从该分区中划出一块存空间分配给请求者,余下的空闲分区仍然留在空闲链中。假如从链首直至链尾都不能找到一个能满足要求的分区,如此此次存分配失败。
b)主要数据结构
typedef struct FreeLink{ //空闲链
struct FreeLink *prior;
char name;
int start;
int size;
bool flag;
struct FreeLink *next;
}* ptr,*head;
head top;
ptr p;
c)存分配算法
当有进程要求分配主存时,依据首次适应算法从链头开始,延链查找一个足以容纳该进程的空闲区。假如这个分区比拟大,如此一分为二,一局部分配给进程,另一局部作为空闲区仍留在链中的当前位置,修改它的上一个空闲区的前向指针值为再加上分配给进程的分区大小,下一个空闲区的后向指针值为再加上分配给进程的分区大小,使链保持完整。假如这个分区的大小正好等于进程的大小,该分区全局部配给进程,并将该空闲区从链中摘除〔即修改下一个空闲区的后向指针=该空闲区后向指针,上一个空闲区的前向指针=该空闲区的前向指针〕。再在已分配区表中找一个空表目,登记刚刚分配的存始址、长度和进程号。
word
word
3 / 13
word
d)存的回收
当进程运行完成,释放存时,通过输入进程号,来回收进程占用的分区。在回收时,释放区与空闲区相邻接的情况要考虑4种情况:
⊙释放区下邻空闲区
⊙释放区上邻空闲区
⊙释放区与上下空闲区均相邻
⊙释放区与上下空闲区均不相邻
e)程序流程图
※空闲链的首次适应算法分配流程图
开始
申请xkb内存
由链头找到第一个空闲区
分区大小≥xkb?
大于
分区大小=分区大小-xkb,修改下一个空闲区的后向指针内容为〔后向指针〕+xkb;修改上一个空闲区的前向指针为〔前向指针〕+xkb
将该空闲区从链中摘除:修改下一个空闲区的后向地址=该空闲区后向地址,修改上一个空闲区的前向指针为该空闲区的前向指针
等于
小于
延链查找下一个空闲区
到链尾了?
作业等待
返回


登记已分配表
返回分配给进程的内存首地址
※空闲链的首次适应算法回收流程图
word
word
4 / 13
word
开始
输入完成进程的标号
在分配区表中查找
释放区p下邻分区空闲区
前一个空闲区的后向指针指向p的后一个分区,p的后一个分区的前向指针指向p的前一个分区,且p的前一个分区大小更改为加上p的大小,释放p
释放区p上邻分区空
前一个分区的后向指针指向p的后一个空闲分区,p的后一个空闲分区的前向指针指向p的前一个分区,且p的后一个分区大小更改为加上p的大小
释放区p上下均邻空闲区
前一个空闲区的后向指针指向p的后一个空闲分区,p的后一个空闲分区的前向指针指向p的前一个空闲分区,且p的前一个空闲分区大小更改为加上p的大小再加上p的后一个空闲分区的大小,合并后的这个空闲区的后向指针指向p的下下个分区,如果p的下下个分区不为空,如此其前向指针指向合并后的这个空闲区,释放p和p的下一个分区
释放区p上下均不邻空闲区
将p放在链首,
并修改其状态位为空闲
word
word
5 / 13
word
f〕截屏
word
word
6 / 13
word
word
word
7 / 13
word
五、 源代码
#include <iostream.>
#include <ma