模拟设计动态分区存储管理的分配与回收

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学号:0121010340518

课程设计

题目模拟设计动态分区存储管理的分配与

回收

学院计算机科学与技术学院

专业

班级

姓名

指导教师吴利军

2013 年01 月16 日

课程设计任务书

学生姓名:专业班级:

指导教师:吴利军工作单位:计算机科学与技术学院题目: 模拟设计动态分区存储管理的分配与回收

初始条件:

1.预备内容:阅读操作系统的内存管理章节内容,理解动态分区存储管理,掌握动态分区管理内存的分配和回收过程。

2.实践准备:掌握一种计算机高级语言的使用。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写

等具体要求)

1.采用动态分区管理方案实施内存分配和回收。能够处理以下的情形

⑴能够输入给定的内存大小,进程的个数,每个进程所需内存空间的大小;

⑵当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资

源后有关内存空间使用的情况;

⑶当某进程撤消时,显示内存回收后内存空间的使用情况(注意回收后的合

并)。

2.设计报告内容应说明:

⑴需求分析;

⑵功能设计(数据结构及模块说明);

⑶开发平台及源程序的主要部分;

⑷测试用例,运行结果与运行情况分析;

⑸自我评价与总结:

i)你认为你完成的设计哪些地方做得比较好或比较出色;

ii)什么地方做得不太好,以后如何改正;

iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);

iv)完成本题是否有其他方法(如果有,简要说明该方法);

时间安排:

设计安排一周:周1、周2:完成程序分析及设计。

周2、周3:完成程序调试及测试。

周4、周5:验收、撰写课程设计报告。

(注意事项:严禁抄袭,一旦发现,一律按0分记)

指导教师签名:年月日

系主任(或责任教师)签名:年月日

模拟设计动态分区存储管理的分配与回收

1.需求分析

1.1动态分区

动态分区分配又称为可变式分区分配,是一种动态划分存储器的分区方法。

不事先将内存划分成一块块的分区,而是在作业进入内存时,根据作业的大小动态地建立分区,并使分区的大小正好适应作业的需要。因此系统中分区的大小是可变的,分区的数目也是可变的。这种分配方法管理简单,只需小量的软件和硬件支持,便于用户了解和使用。进程的大小与某个分区大小相等,从而主存的利用率有所提高。

动态分区虽然解决了固定分区所造成的内存浪费问题,但随着进程的动态变化,系统也将进行一系列的内存空间的分配和回收活动,每个进程所释放的内存空间就作为一个空闲区加以再分配。

由于再分配时只能分给不大于当前空闲区的进程,所以每个空闲区再分配时多数情况下会变成两个区:一个区分给当前请求内存空间的进程,剩下的空间依然作为空闲区等待分配。这样,分配后剩余的空闲区将会越分越少,从而导致内存中存在大量分散的小空闲区,这种小得不能再利用的空闲区称之为“碎片”。

1.2分配内存

系统利用某种分配算法,从空闲分区表/链中找到所需大小的分区。

分区的切割:设请求的分区大小为u.size,空闲分区的大小为m.size,若m.size-u.size size(size是事先规定的不再切割的剩余分区的大小),说明多余部分大小,可不再切割,将整个分区分配给请求者;否则,从该分区中按请求的大小划分出一块内存空间分配出去,余下的部分仍留在空闲分区表/链中,然后,将分配区的首址返回给调用者。

1.3回收内存

当作业执行结束时,应回收已使用完毕的分区。系统根据回收分区的大小及首地址,在空闲分区表中检查是否有邻接的空闲分区,如有,则合成为一个大的空闲分区,然后修改有关的分区状态信息。回收分区与已有空闲分区的相邻情况有以下四种:

①回收分区上邻接一个空闲分区,合并后首地址为空闲分区的首地址,大小

为二者之和。

②回收分区下邻接一个空闲分区,合并后首地址为回收分区的首地址,大

小为二者之和。

③回收分区上下邻接空闲分区,合并后首地址为上空闲分区的首地址,大

小为三者之和。

④回收分区不邻接空闲分区,这时在空闲分区表中新建一表项,并填写

分区大小等信息。

2.功能设计

2.1数据结构

2.1.1空闲分区表

分区大小及状态).

状态

分区号大小KB 起始地址

KB

1 3

2 352 空闲

2 ……空表目

3 520 50

4 空闲

4 ……空表目

5 ………

2.1.2 空闲分区链

用链头指针将系统中的空闲分区链接起来,构成空闲分区链。每个空闲分区的起始部分存放相应的控制信息(如大小,指向下一空闲分区的指针等).

2.2 模块说明

2.12.1 分区说明表

struct PST

{//partition specification table

int id;//分区号

int addr;//起始地址

int size;//分区长度

Status state;//状态

};

2.2.2 双向链表

struct Node

{//双向链表结点

PST data;

Node *back;//前驱

Node *next;//后继

Node()

{

back=NULL;

next=NULL;

}

Node(int id,int size)

{

data.ID=id;

data.size=size;

back=NULL;

next=NULL;

}

};

2.2.3 最先适应算法

空闲分区(链)按地址递增的次序排列。在进行内存分配时,从空闲分区表/链首开始顺序查找,直到找到第一个满足其大小要求的空闲分区为止。然后再按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲

相关文档
最新文档