- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验四
实验四可变分区存储管理方式的内存分配和回收
实验目的
通过编写和调试存储管理的模拟程序以加深対存储管理方案的理解,熟悉可变分区存储 管理的内存分配和回收。
实验属性
设计
实验内容
1 ?确定内存空间分配表;
釆用最优适应算法完成内存空间的分配和回收;
编写主函数对所做工作进行测试。
实验背景材料
实现可变分区的分配和冋收,主要考虑的问题有三个:第-,设计记录内存使用情况的 数据表格,用来记录空闲区和作业占用的区域;第二,在设计的数据表格基础上设计内存分 配算法;笫三,在设计的数据表格棊础上设计内存回收算法。
首先,考虑第一个问题,设计记录内存使川情况的数据表格,川来记录空间区和作业占 用的区域。
由于可变分区的大小是由作业需求虽决定的,故分区的长度是预先不固定的,fl分区的 个数也随内存分配和冋收变动。总Z,所有分区情况随时可能发生变化,数据农格的设计必 须和这个特点相适应。山于分区长度不同,因此设计的表格应该包括分区在内存中的起始地 址和长度。由于分配时空闲区有时会变成两个分区:空闲区和已分分区,回收内存分区时, 可能会合并空闲分区,这样如果整个内存采用一?张表格记录己分分区和空闲区,就会使表格 操作繁琐。分配内存时查找空闲区进行分配,然后填写己分配区表,主要操作在空闲区;某 个作业执行完后,将该分区变成空闲区,并将其与相邻的空闲区合并,主要操作也在空闲区。 山此可见,内存的分配和回收主要是対空闲区的操作。这样为了便于対内存空间的分配和回 收,就建立两张分区表记录內存使用情况,一张表格记录作业占用分区的“己分分区表”; 一张是记录空闲区的“空闲区表”。这两张表的实现方法一般有两种:一种是链表形式,一 种是顺序表形式。在实验屮,采用顺序表形式,用数组模拟。由于顺序表的长度必须提前固 定,所以无论是“已分分区表”还是“空闲区表”都必须事先确定长度。它们的长度必须是 系统可能的最大项数。
“己分分区表”的结构定义
#define n 10 //假定系统允许的最人作业数蜃为n
struct
{ float address; //已分分区起始地址
float length; //已分分区长度、单位为字节
intflag; //Q分分区表登记栏标志,“0”表示空栏目,实验屮只支持一个字符的作业 名
}used_table[n]; 〃已分分区表
“空闲区表”的结构定义
#define m 10 //假定系统允许的空闲区最大为m
struct
{ float address; //空闲区起始地址
float length; //空闲区长度、单位为字节
int flag; 〃空闲区表登记栏标志,“0”表示空栏目,T 表示未分配 }used_table[n]; 〃空闲区表
第二,在设计的数据表格基础上设计内存分配。
装入一个作业时,从空闲区表中查找满足作业长度的未分配区,如大于作业,空闲区划 分成两个分区,一个给作业,一个成为小空闲分区。
实验屮内存分配的算法采用“最优适应”算法,即选择一个能满足要求的最小空闲分区。 可变分区方式的内存分配流程如图。
第三,在设计的数据表格皋础上设计内存回收问题。内存回收时若相邻冇空闲分区则合 并空闲区,修改空闲区表。
可变分区方式的内存回收流程如图。
YN“未分配” ?Y第k栏长度二第k栏N第i栏不是空丙 区表中一栏或回收分区的上下邻空闲区均 找到?笫i栏为冋收分区的下邻?第i栏状态为第i栏为回收分区的上邻?YNN和匕下邻三项合并:区冇上邻?乂有卜邻?区冇下邻?回收分凹收分回收分
Y
N
“未分配” ?
Y
第k栏长度二第k栏
N
第i栏不是空丙 区表中一栏或回收分区的
上下邻空闲区均 找到?
笫i栏为冋收
分区的下邻?
第i栏状态为
第i栏为回收
分区的上邻?
Y
N
N
和匕下邻三项合并:
区冇上邻?
乂有卜邻?
区冇下邻?
回收分
凹收分
回收分
N
Y
和上邻合并: 第k栏长度= 第k栏长度+L
是空闲表中
和下邻合并:
第j栏长度=第)栏 长度+L
第j栏起始地址=S
T 、
己分分区表第 S栏状态为J; 空闲区表长度不 足,回收失败
N
1
Y
归还分区填入空闲区 表:
第t栏起始地址=s
第t栏长度=L
第t栏状态二”未分配〃
实验报告
写出你编写的c语言程序。
描述可变分区存储管理的算法和思路。
总结体会nJ变分区存储管理方法。
六、参考程序
ttdefine n 10 //假定系统允许的最大作业数量为n
#define m 10 〃假定系统允许的空闲区最人为m
struct{ float address; float length;
struct
{ float address; float length;
int flag;
字符的作业名
}used_table[n];
〃
文档评论(0)