设计页式存储管理的分配与回收
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学号:
课程设计
题目模拟设计页式存储管理的分配与回收
学院计算机科学与技术专业
班级
姓名
指导教师吴利军
2013 年01 月09 日
课程设计任务书
学生姓名:
指导教师:吴利军工作单位:计算机科学与技术学院题目: 模拟设计页式存储管理的分配与回收
初始条件:
1.预备内容:阅读操作系统的内存管理章节内容,理解有关虚拟存储器、页式存储管理等概念,掌握页式管理内存的分配和回收过程。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写
等具体要求)
1.采用页式管理方案实施内存分配和回收。能够处理以下的情形
⑴能够输入给定的内存页面数,页面大小,进程的个数及每个进程的页数。
⑵当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资
源后内存空间的使用情况(被进程占用的页面,空闲的页面);
⑶当某进程撤消时,显示内存回收后内存空间的使用情况。
2.设计报告内容应说明:
⑴需求分析;
⑵功能设计(数据结构及模块说明);
⑶开发平台及源程序的主要部分;
⑷测试用例,运行结果与运行情况分析;
⑸自我评价与总结:
i)你认为你完成的设计哪些地方做得比较好或比较出色;
ii)什么地方做得不太好,以后如何改正;
iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);
iv)完成本题是否有其他方法(如果有,简要说明该方法);
时间安排:
设计安排一周:周1、周2:完成程序分析及设计。
周2、周3:完成程序调试及测试。
周4、周5:验收、撰写课程设计报告。
(注意事项:严禁抄袭,一旦发现,一律按0分记)
指导教师签名:年月日
系主任(或责任教师)签名:年月日
模拟设计页式存储管理
的分配与回收
1需求分析
图2 基本页表示例
静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统通过存储页面表、请求表以及页表来完成内存的分配工作。页表指的是内存中的一块固定存储区。页式管理时每个进程至少有一个页表。请求表指的是用来确定作业或进程的虚拟空间的各页在内存中的实际对应位置;另外整个系统有一个存储页面表,其描述了物理内存空间的分配使用状况。
图3 请求表的示例
存储页面表有两种构成方法:
1、位示图法
2、空闲页面链表法
模拟设计页式存储管理的分配与回收要求能够满足如下的要求:
(1)输入给定的内存页面数,页面大小,进程的个数及每个进程的页数。
(2)要求当某进程提出申请空间的大小后,显示能否满足申请,以及为该进
程分配资源后内存空间的使用情况(被进程占用的页面,空闲的页面)。
2 功能设计
2.1 算法分析
首先,请求表给出进程或作业要求的页面数。然后,由存储页面表检查是否有足够的空闲页面,如果没有,则本次无法分配。如果有则首先分配设置页表,并请求表中的相应表项后,按一定的查找算法搜索出所要求的空闲页面,并将对应的页好填入页表中。
图4 分配页面的算法流程
2.2 数据结构
页式管理把内存空间按页的大小划分成片或者页面,再按照一定的规律建立起页表,并通过请求表将分配内容显示出来.将页表和请求表的内容使用结构体来定义是比较方便的.
//页表项结构
typedef struct _pagetableitem
{
pageid pagenum; //页号
blockid blocknum; //块号
}pgtabitem; //页表
typedef pgtabitem * pagetable;
//请求表结构
typedef struct _reqtable
{
unsigned pid; //进程号
unsigned reqpagenum; //请求页面数
pagetable pgtabadr; //页表始址
bool state; //状态
} reqtabitem;
请求表还引入了支持快速插入和删除的list顺序容器来进行相关操作.
list
因为模拟设计的关系,页面的起始地址均应该为随机的数值,所以程序在设计过程中加入了随机数类的编写.
class RandomNumber
{
private:
unsigned long randseed;
public:
RandomNumber(unsigned long s=0);
unsigned short Random(unsigned long n);
double fRandom(void);
};
采用当前系统的时间值来生成伪随机数分配地址.
定义随机数产生器:RandomNumber random
定义内存页面数:int pagenum
定义页面大小:int pagesize
定义进程个数:int pnum
用整数数组模拟分配的内存页面数int * mempage=new int[pagenum]
2.3模块说明
2.3.1 主函数
主函数依次运行了程序中所实现的关键函数.
int main(){
InitSys(); //初始化系统
MainChoice();//输出系统菜单
Destroy(); //释放申请的动态内存
return 0;}