动态分区存储管理的模拟实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 内存回收流程图:

开始

判断空闲区上下内存情况

上为空下为空上下都为空上下都不为空

将上面的空闲区合并,并回收将下面的空闲区

合并,并回收

将上下的空闲区

合并,并回收

直接将其回收

结束

相关文档
最新文档