- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
题 目: 模拟设计页式存储管理的分配与回收
1需求分析
页式管理是一种 内存空间存储管理的技术,页式管理分为静态页式管理和动态页式管理。基本原理是将各 进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(page frame),然后把页式 虚拟地址与 内存地址建立一一对应页表,并用相应的 硬件地址变换机构,来解决 离散地址变换问题。页式管理采用请求调页或预调页技术实现了内外存 存储器的统一管理。
图1 页的划分
图2 基本页表示例
静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统通过
存储页面 表、请求表以及页表来完成内存的分配工作。页表指的是内存中的一块固定存储区。页式管理时每个进程至少有一个页表。请求表指的是用来确定作业或进程的虚拟空间的各页在内存中的实际对应位置;另外整个系统有一个存储页面表,其描述了物理内存空间的分配使用状况。
图3 请求表的示例
存储页面表有两种构成方法:
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顺序容器来进行相关操作.
listreqtabitem reqtable
因为模拟设计的关系,页面的起始地址均应该为随机的数值,所以程序在
设计过程中加入了随机数类的编写.
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;}
2.3
初始化内存页面: void Init_Mempage(void)
获取内存使用情况: int Get_Mempagenum(void)
初始化默认的请求表: void Init_Reqtable(void)
为默认的进程分配内存: void Init_DistMem(void)
手动创建进程,并分配内存: void Dist_Mem(void)
释放申请的动态内存: void Destroy(void)
结束指定进程: void Ki
文档评论(0)