动态分区存储管理的模拟实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与工程学院学生实验报告
专业计算机科学与技术班级
学号姓名
课程名称操作系统课程类型专业必修课
实验名称动态分区存储管理的模拟实现
实验目的:
1.熟悉动态分区存储管理方式下,主存空间的分配和回收算法。
2.提高C语言编程能力。
实验内容:
假设主存当前状态如右表所示:
系统采用最佳适应分配算法为作业分配主存空间,
而且具有紧凑技术。请编程完成以下操作:
(1). 输出此时的已分配区表和未分配区表;
(2). 装入 Job3(15K),输出主存分配后的已分配
区表和未分配区表;
(3). 回收 Job2所占用的主存空间,输出主存回收
后的已分配区表和未分配区表;
(4).装入 Job4(130K),输出主存分配后的已分配
区表和未分配区表。
实验要求
1.数据结构参考定义如下,也可根据需要进行改进:
(1)已分配区表:
#define n 10 /*假定系统允许的最大作业数量为n,n值为10*/
struct
{int number; /*序号*/
int address; /*已分配分区起始地址,单位为KB */
int length; /*已分配分区长度,单位KB*/
float flag; /*已分配区表登记栏标志,0:空表项,否则为作业名;*/
}used_table[n]; /*已分配区表*/
(2)未分配区表:
#define m 10 /*假定系统允许的空闲区表最大为m,m值为10*/
struct
{int number; /*序号*/
int address; /*空闲区起始地址,单位为KB */
int length; /*空闲区长度,单位为KB*/
int flag; /*空闲区表登记栏标志,0:空表项;1:空闲区*/
}free_table[m]; /*空闲区表*/
2.以allocate命名主存分配所用的过程或函数(算法参考课件),要将各种情况考虑周全。
3.以reclaim命名主存回收所用的过程或函数(算法参考课件),要将各种情况考虑周全。
4.画出算法实现的N-S流程图。
5.程序调试、运行成功后,请老师检查。
实验步骤:
1.分配内存,结果如下图:
2.回收内存,结果如下图:
3.合并内存,结果如下图:
4.N-S流程图:
4.1 内存分配流程图:
从头开始查表
检索完否?
分区大小>所需大小
分区大小-所需大小<=
不可再分割大小
从该分区中划出所需大小的新分区
将该分区分配给请求者修改有关数
据结构
返回
继续检索下一个表项
将该分区从链中移出
返回
Y
Y
Y
N
N
N
4.2 内存回收流程图:
开始
判断空闲区上下内存情况
上为空下为空上下都为空上下都不为空
将上面的空闲区合并,并回收将下面的空闲区
合并,并回收
将上下的空闲区
合并,并回收
直接将其回收
结束