主存空间的分配与回收实验报告

上传人:re****.1 文档编号:456363059 上传时间:2022-09-24 格式:DOC 页数:16 大小:157.50KB
返回 下载 相关 举报
主存空间的分配与回收实验报告_第1页
第1页 / 共16页
主存空间的分配与回收实验报告_第2页
第2页 / 共16页
主存空间的分配与回收实验报告_第3页
第3页 / 共16页
主存空间的分配与回收实验报告_第4页
第4页 / 共16页
主存空间的分配与回收实验报告_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《主存空间的分配与回收实验报告》由会员分享,可在线阅读,更多相关《主存空间的分配与回收实验报告(16页珍藏版)》请在金锄头文库上搜索。

1、. -实验报告课程名称:操作系统实验名称:主存空间的分配与回收学 号:110310014学生*:于钊班 级: 信管1101班指导教师:吴联世实验日期:2021年12月5日1、实验目的:熟悉主存的分配与回收。理解在不同的存储管理方式下,如何实现主存空间的分配与回收。掌握动态分区分配方式中的数据构造和分配算法及动态分区存储管理方式及其实现过程。2、实验要求实验要求使用可变分区存储管理方式,分区分配中所用的数据构造采用空闲分区表和空闲分区链来进展,分区分配中所用的算法采用首次适应算法、循环首次适应算法、最正确适应算法三种算法来实现主存的分配与回收。同时,要求设计一个实用友好的用户界面,并显示分配与回

2、收的过程。3、实验环境硬件: CPU :AMD QL64 内存:2GB显卡:ATI 4570硬盘:日立250G软件:Windows 2000/*P。 开发工具:VC+6.0。4、实验内容1实现原理主存的分配和回收的实现是与主存储器的管理方式有关的。所谓分配,就是解决多道作业或多进程如何共享主存空间的问题。所谓回收,就是当作业运行完成时将作业或进程所占的主存空间归还给系统。可变分区管理是指在处理作业过程中建立分区,使分区大小正好适合作业的需求,并且分区个数是可以调整的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,假设有,则按需要量分割一个分区分配给该作业;假设无,则作业不能

3、装入,作业等待。随着作业的装入、完成,主存空间被分成许多大大小小的分区,有的分区被作业占用,而有的分区是空闲的。为了说明那些分区是空闲的,可以用来装入新作业,必须有一*空闲说明表例如:010k20k45k65k110k256k操作系统10KB作业110KB作业425KB空闲区120KB作业245KB空闲区2146KB空闲区说明表格式如下:起始地址长度状态第一栏45 K20KB未 分 配第二栏110 K146 KB未 分 配MM空 表 目空 表 目MM其中,起址指出一个空闲区的主存起始地址,长度指出空闲区的大小。长度指出从起始地址开场的一个连续空闲的长度。状态有两种状态,一种是未分配状态,指出对

4、应的由起址指出的*个长度的区域是空闲区;另一种是空表目状态,表示表中对应的登记工程是空白无效,可用来登记新的空闲区例如,作业完成后,它所占的区域就成了空闲区,应找一个空表目栏登记归还区的起址和长度且修改状态。由于分区的个数不定,所以空闲区说明表中应有适量的状态为空表目的登记栏目,否则造成表格溢出无法登记。2、当有一个新作业要求装入主存时,必须查空闲区说明表,从中找出一个足够大的空闲区。有时找到的空闲区可能大于作业需要量,这时应把原来的空闲区变成两局部:一局局部给作业占用;另一局部又成为一个较小的空闲区,留在空闲区表中。为了尽量减少由于分割造成的空闲区,尽可能分配低地址局部的空闲区,而尽量保存高

5、地址局部有较大的连续空闲区域,以利于大型作业的装入。为此,在空闲区说明表中,把每个空闲区按其地址顺序从低到高登记,即每个后继的空闲区其起始地址总是比前者大。为了方便查找还可使表格紧缩,总是让空表目项留在表格的后部。3、采用最先适应算法顺序分配算法分配主存空间。按照作业的需要量,查空闲区说明表,顺序查看登记栏,找到第一个能满足要求的空闲区。当空闲区大于需要量时,一局部用来装入作业,另一局部仍为空闲区登记在空闲区说明表中。由于本实验是模拟主存的分配,所以把主存区分配给作业后并不实际启动装入程序装入作业,而用输出分配情况来代替。4、当一个作业执行完成撤离时,作业所占的分区应该归还给系统,归还的分区如

6、果与其它空闲区相邻,则应合成一个较大的空闲区,登记在空闲区说明表中。例如,在上述中列举的情况下,如果作业2撤离,归还所占主存区域时,应与上、下相邻的空闲区一起合成一个大的空闲区登记在空闲区说明表中。2程序构造流程图首次适应分配模拟算法主存回收算法3实现步骤实现动态分区的分配与回收,主要考虑三个问题:第一,设计记录主存使用情况的数据表格,用来记录空闲区和作业占用的区域;第二,在设计的数据表格根底上设计主存分配算法;第三,在设计的数据表格根底上设计主存回收算法。1 设计记录主存使用情况的数据表格由 于动态分区的大小是由作业需求量决定的,故分区的长度是预先不固定的,且分区的个数也随主存分配和回收变动

7、。总之,所有分区情况随时可能发生变化,数据表 格的设计必须和这个特点相适应。由于分区长度不同,因此设计的表格应该包括分区在主存中的起始地址和长度。由于分配时,空闲区有时会变成两个分区:空闲区 和已分分区,回收主存分区时,可能会合并空闲区,这样如果整个主存采用一*表格记录已分分区和空闲区,就会使表格操作繁琐。主存分配时查找空闲区进展分 配,然后填写已分配区表,主要操作在空闲区;*个作业执行完后,将该分区贬词空闲区,并将其与相邻的空闲区合并,主要操作也在空闲区。由此可见,主存的分 配与回收主要时对空闲区的操作。这样为了便于对主存空间的分配与回收,就建立两*分区表记录主存的使用情况:已分配区表记录作

8、业占用分区,空闲区 表记录空闲区。这两*表的实现方法一般由两种:链表形式、顺序表形式。在本实验中,采用顺序表形式,用数组模拟。由于顺序表的长度必须提前固 定,所以无论是已分配区表还是空闲区表都必须事先确定长度。它们的长度必须是系统可能的最大项数,系统运行过程中才不会出错,因此在多数情况下, 无论是已分配表区还是空闲区表都是空闲栏目。已分配区表中除了分区起始地址、长度外,也至少还有一项标志,如果是空闲栏目,内容为空,如 果为*个作业占用分区的登记项,内容为该作业的作业名;空闲区表除了分区起始地址、长度外,也要有一项标志,如果是空闲栏目,内容为空,如果为* 个空闲区的登记项,内容为未分配。在实际系

9、统中,这两个表格的内容可能还要多,实验中仅仅使用上述必须的数据。为此,已分配区表和空闲区表在 实验中有如下的构造定义。已分配区表的定义:*define n 10 /假定系统允许的最大作业数量为nstruct float address; /已分分区起始地址 float length; /已分分区长度,单位为字节 int flag; /已分配表区登记栏标志,用0表示空栏目,used_tablen; /已分配区表空闲区表的定义:*define m 10 /假定系统允许的空闲区表最大为mstruct float address; /空闲区起始地址float length; /空闲区长度,单位为字节

10、int flag; /空闲区表登记栏目用0表示空栏目,1表示未分配free_tablem; /空闲区表其中分区起始地址和长度数值太大,超出了整形表达范围,所有采用float类型。2 在设计的表格上进展主存分配当 要装入一个作业时,从空闲区表中查找标志为未分配的空闲区,从中找一个能容纳该作业的空闲区。如果找到的空闲区正好等于该作业的长度,则把该分区全部 分配给该作业。这时应该把该空闲区登记栏中的标志改为空,同时在已分配区表中找到一个标志为空的栏目登记新装入作业所占用分区的起始地址、长度和 作业名。如果找到的空闲区大于作业长度,则把空闲区分成两局部,一局部用来装入作业,另一局部你仍然为空闲区,这时

11、只要修改空闲区的长度,且把新装入的作 业登记到已分配区表中。主存分配算法目前一般采用三种算法:首次适应算法、循环首次适应算法、最正确适应算法。本实验中采用最正确适应算法为作业分配主存。最正确适应算法会出现空闲分区分割后剩下的空闲分区很小以至于无法使用的情况,为了在一定程度上解决这个问题,如果空闲分区的大小比作业要求的长度略大一点,不再将空闲区分区分割成已分分区和空闲分区两局部,而是将整个空闲区分配给作业。 在实现最正确适应算法时,可把空闲分区按长度递增方式登记在空闲区表中。分配时顺序查找空闲表,查找到的第一个空闲区就是满足作业要求的最小分区。这样查找 速度快,但是为使空闲区按照长度递增登记在空

12、闲表中,就必须在分配回收时进展空闲区的调整。空闲区表调整时移动标模的代价要高于查询整*表的代价,所以实 验中不采用空闲区有序登记在空闲表中的方法。3 动态分区方式下的主存回收 动态分区方式下回收主存空间时应该检查是否有与归还区相邻的空闲区域。假设有,则应该合并成一个空闲区。一个归还区可能有上邻空闲区,也可能有下邻空闲区,或者既有上邻空闲区又有下邻空闲区,或者既无上邻空闲区也无下邻空闲区。 在实现回收时,首先将作业归还的区域在已分配表中找到,将该栏目的状态变为空,然后检查空闲区表中标志为未分配栏目,查找是否又相邻空闲区;最后合并空闲区,修改空闲区表。假定归还作业的分区起始地址为S,长度为L,则:

13、1 归还区又下邻空闲区如果SL正好等于空闲区表中*个登记栏目假定为第j栏的起始地址则说明归还区有一个下邻空闲区。这时候只需要修改第j栏登记项的内容: 起始地址S;第j栏长度第j栏长度L则第j栏指示的空闲区时归还区和下邻空闲区合并后的大空闲区。2 归还区又上邻空闲区如果空闲区表中*个登记栏目假定为第k栏的起始地址长度正好等于S,则说明归还区有一个上邻空闲区。这时要修改第k栏登记项的内容起始地址不变: 第k栏长度第k栏长度L;于是第k栏指示的空闲区是归还区和上邻空闲区合并后的大空闲区。3 归还区既有上邻空闲区又有下邻空闲区如果SL正好等于空闲区表中*个登记栏目假定为第j栏的起始地址,同时还有*个登

14、记栏目假定为第k栏的起始地址长度正好等于S,这说明归还区既有一个上邻空闲区又又一个下邻空闲区。此时对空闲区的修改如下: 第k栏的长度第k栏的长度第j栏的长度L;第k 栏的起始地址不变 第j栏的状态空将第j栏的登记项删除 这样,第k栏指示的空闲区是归还区和上、下邻空闲区合并后的大空闲区;原来的下邻空闲区登记项第j栏被删除,置为空。4 归还区既无上邻空闲区又无下邻空闲区如果在检查空闲区表时,无上述三种情况出现,则说明归还区既无上邻空闲区又无下邻空闲区。这时,应该在空闲区表中查找一个状态为空的栏目假定查到的是第t栏,则第t栏的内容修改如下: 第t栏起始地址S; 第t栏的长度L; 第t栏的状态未分配;这样,第t栏指示的空闲区是归还区。 由于是实验,没有真正的主存要

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号