内存管理、分配与回收模拟实验.docxVIP

  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文档。上传文档
查看更多
实验成绩 实验 成绩 姓名 学号 华中师范大学计算机科学系 实 验 报 告 书 实验题目:内存管理、分配与回收 课程名称:  操作系统 主讲教师: 辅导教师: 课程编号: 班  级: 实验时间: 一、实验目的: 掌握内存分区管理的基本思想,理解内存分配表。 深入理解可变分区的内存分配策略,掌握首先适应算法、最佳适应算法和 最坏适应算法。 掌握内存碎片产生的途径以及解决碎片的方法——拼接技术。 实现分区的回收。 针对内存管理的相关活动,研究内存空闲队列的动态组织与管理问题,以 及在此基础上执行的内存分配与回收活动。 二、实验内容: 本实验将利用伙伴系统来组织内存空闲块队列和已使用内存块队列。从初 始化快照、某一组作业申请内存块前的快照、分配成功后的快照等状态出发, 结合内存分配原语(算法)和内存回收原语(算法)的实现,结合实际内存块 的动态分配与回收情况(某一快照),研究内存空闲块队列的组织、变化及其队 列管理方面的问题。具体内容如下: 实现内存分配算法和内存回收算法。 以伙伴系统的组织方式管理内存空闲队列和已使用内存块队列,具体的组 织策略应分别考虑首次适应策略、最佳适应策略和最坏适应策略。 考虑在某一内存使用一段时间的快照,给出一组作业的内存申请,判断该 申请是否可以被满足。 3、实验要求 分配算法中切割空闲区是从低地址开始; 需考虑门限值情况,门限值是指切割空闲区后剩下的区域若小于一个用户 给定的值时,就不切割该空闲区,统统分给申请者,这个值由用户指定; 回收算法需要考虑上邻、下邻、上下邻和不相邻四种情况。 四、实验环境: 实践平台:windows 编写环境:CodeBlocks 编译器:g++ 五、实验设计原理 (1)可变分区基本思想 可变分区是指系统不预先划分固定分区,而是在装入程序时划分,使程序 分配的大小正好等于程序的需求量,且分区的个数是可变的,这样有较大的灵 活性,较之固定分区能获得更好的内存利用率。其状态如图所示: (2)内存分配表 内存分配表由两张表格组成:一张是已分配表,记录已装入的程序在内存 中占用分区的起始地址和长度,并表之位指出占用分区的程序名;另一张是空 闲区表,记录内存中可供分配的空闲区的起始地址和长度,用标志位指出该分 区是未分配的空闲区。其基本结构如图所示: ( 3)分配策略 首次适应算法(First Fit):从空闲分区表的第一个表目起查找该表,把 最先能够满足要求的空闲区分配给作业,这种方法的目的在于减少查找时间。 为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进 行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区, 在高地址空间保留大的空闲区。 最佳适应算法(Best Fit):从全部空闲区中找出能满足作业要求的、且大 小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表 (空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个 满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。 最差适应算法(Worst Fit):从全部空闲区中找出能满足作业要求的、且 大小最大的空闲分区,从而使链表中的结点大小趋于均匀,适用于请求分配的 内存大小范围较窄的系统。为适应此算法,空闲分区表(空闲区链)中的空闲 分区按大小从大到小进行排序,自表头开始查找到第一个满足要求的自由分区 分配。该算法保留小的空闲区,尽量减少小的碎片产生。 (4)碎片拼接 采用可变分区存储管理方案后,经过一段时间的分配回收,内存中会存在 很多很小的空闲块。需要在适当时刻进行碎片整理,通过内存中移动程序,把 所有空闲碎片合并成一个连续的大空闲区且放在内存的一端,而把所有程序占 用区放在内存另一端。 (5)分区的回收 当用户执行结束后,系统要收回已经使用完毕的分区,将其记录在空闲区 表中。一般情况下应考虑四种情况: 回收分区的上邻分区是空闲的,需要将这两个相邻的空闲分区合并成一 个更大的空闲区,然后修改空闲区表。 回收分区的下邻分区是空闲的,需要将这两个相邻的空闲分区合并成一 个更大的空闲区,然后修改空闲区表。 回收分区上下邻区都是空闲的,需要将三者合并成一个更大的空闲区, 然后修改空闲表。 回收区的上邻下邻区都不是空闲的,则直接将空闲区记录在空闲表中。 五、实验详细实现过程与算法流程 (一)数据结构 1. 作业结构 本实验的重点是对内存的管理、分配与回收,所以作业的内部结构简单, 仅包含:进程名(name)、程序大小(size)和内部指针(next),其结构如图: 2. 分配表结构 本实验的分配表结构包含:进程名兼区名(name)、地址(address)、程序 大小(size)、状态(state)和内部指针(next),其结构如图: 2. 队列结构

文档评论(0)

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

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

1亿VIP精品文档

相关文档