没有合适的资源?快使用搜索试试~ 我知道了~
实验三动态分区存储管理方式的主存分配回收 - 实验三动态分区存储.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 104 浏览量
2022-07-06
06:17:18
上传
评论
收藏 311KB DOC 举报
温馨提示
试读
9页
实验三动态分区存储管理方式的主存分配回收 - 实验三动态分区存储
资源推荐
资源详情
资源评论
实验三 动态分区存储管理方式的主存分配回收
1.实验目的
深入了解动态分区存储管理方式的主存分配回收的实现。
2.实验预备知识
存储管理中动态分区的管理方式。
3.实验内容
编写程序完成动态分区存储管理方式的主存分配回收的实现。实验具体包括:首先确定主存空间分
配表;然后采用最优适应算法完成主存空间的分配,完成主存空间的回收;最后编写主函数对所作工作
进程测试。存分配时查找空闲区进行分配,然后填写已分配区表,主要操作在空闲区;某个作业执行完
后,将该分区变成空闲区,并将其与相邻的空闲区合并,主要操作也在空闲区。由此可见,主存的分配
和回收主要是对空闲区的操作。这样为了便于对主存空间的分配和回收,就建立两张分区表记录主存使
用情,一张表格记录作业占用分区的“已分配区表”;一张是记录空闲区的“空闲区表”。这两张表的实现方
法一般有两种,一种是链表形式,一种是顺序表形式。在实验中,采用顺序表形式,用数组模拟。由于
顺序表的长度必须提前固定,所以无论是“已分配区表”还是“空闲区表”都必须事先确定长度。它们的长度
必须是系统可能的最大项数,系统运行过程中才不会出错,因而在多数情况下,无论是“已分配区表”还
是“空闲区表”都有空闲栏目。已分配区表中除了分区起始地址、长度外,也至少还要有一项“标志”,如果
是空闲栏目,内容为“空”,如果为某个作业占用分区的登记项,内容为该作业的作业名;空闲区表中除
了分区起始地址、长度外,也要有一项“标志”,如果是空闲栏目,内容为“空”,如果为某个空闲区的登记
项,内容为“未分配”(。在实际系统中,这两表格的内容可能还要多,实验中仅仅使用上述必须的数据
为此,“已分配区表”和“空闲区表”在实验中有如下的结构定义。
已分配区表的定义:
#define n 10 //假定系统允许的最大作业数量为n
struct
{float address; //已分分区起始地址
float length; //已分分区长度,单位为字节
int flag; //已分配区表登记栏标志,“0”表示空栏目,实验中只支持一个字符的作业名
}used_table[n]; //已分配区表
空闲区表的定义:
#define m 10 //假定系统允许的空闲区表最大为m
struct
{float address; //空闲区起始地址
float length; //空闲区长度,单位为字节
int flag; //空闲区表登记栏标志,用“0”表示空栏目,用“1”表示未分配
}free_table[m]; //空闲区表
其中分区起始地址和长度数值太大,超出了整型表达范围,所以采用了float类型。
然后,就要考虑如何在设计的数据表格上进行主存的分配。
当要装入一个作业时,从空闲区表中查找标志为“未分配”的空闲区,从中找出一个能容纳该作业的
空闲区。如果找到的空闲区正好等于该作业的长度,则把该分区全部分配给作业。这时应该把该空闲区
登记栏中的标志改为“空”,同时在已分配区表中找到一个标志为“空”的栏目登记新装入作业所占用分区的
起始地址、长度和作业名。如果找到的空闲区大于作业长度,则把空闲区分成两部分,一部分用来装入
1
资源评论
omyligaga
- 粉丝: 53
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功