实验四可变分区存储管理方式的内存分配和回收.docxVIP

实验四可变分区存储管理方式的内存分配和回收.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档