模拟设计动态分区存储管理的分配与回收
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 最先适应算法
空闲分区(链)按地址递增的次序排列。在进行内存分配时,从空闲分区表/链首开始顺序查找,直到找到第一个满足其大小要求的空闲分区为止。然后再按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲