ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:301.34KB ,
资源ID:16873519      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16873519.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(完整word版操作系统课程设计模拟设计页式存储管理的分配与回收范文Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

完整word版操作系统课程设计模拟设计页式存储管理的分配与回收范文Word文档下载推荐.docx

1、 源程序的主要部分; 测试用例,运行结果与运行情况分析; 自我评价与总结:)你认为你完成的设计哪些地方做得比较好或比较出色;)什么地方做得不太好,以后如何改正;)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);)完成本题是否有其他的其他方法(如果有,简要说明该方法);)对实验题的评价和改进意见,请你推荐设计题目。时间安排:设计安排一周:周1、周2:完成程序分析及设计。周2、周3:完成程序调试及测试。周4、周5:验收,撰写课程设计报告。(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记) 指导教师签名: 年 月 日系主任(或责任教师)签名:模拟设计页式存储管理的分配与回收1需求分

2、析页式管理是一种内存空间存储管理的技术,页式管理分为静态页式管理和动态页式管理。基本原理是将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(page frame),然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。页式管理采用请求调页或预调页技术实现了内外存存储器的统一管理。图1 页的划分图2 基本页表示例静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统通过存储页面表、请求表以及页表来完成内存的分配工作。页表指的是内存中的一块固定存储区。页式管理时每个进程至少有一个页表。请求表指

3、的是用来确定作业或进程的虚拟空间的各页在内存中的实际对应位置;另外整个系统有一个存储页面表,其描述了物理内存空间的分配使用状况。图3 请求表的示例存储页面表有两种构成方法:1、位示图法2、空闲页面链表法模拟设计页式存储管理的分配与回收要求能够满足如下的要求:(1) 输入给定的内存页面数,页面大小,进程的个数及每个进程的页数。(2) 要求当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资源后内存空间的使用情况(被进程占用的页面,空闲的页面)。2 功能设计2.1 算法分析首先,请求表给出进程或作业要求的页面数。然后,由存储页面表检查是否有足够的空闲页面,如果没有,则本次无法分配。如

4、果有则首先分配设置页表,并请求表中的相应表项后,按一定的查找算法搜索出所要求的空闲页面,并将对应的页好填入页表中。 图4 分配页面的算法流程2.2 数据结构页式管理把内存空间按页的大小划分成片或者页面,再按照一定的规律建立起页表,并通过请求表将分配内容显示出来.将页表和请求表的内容使用结构体来定义是比较方便的. /页表项结构 typedef struct _pagetableitem pageid pagenum; /页号 blockid blocknum; /块号pgtabitem; /页表typedef pgtabitem * pagetable; /请求表结构typedef struct

5、 _reqtable unsigned pid; /进程号 unsigned reqpagenum; /请求页面数 pagetable pgtabadr; /页表始址 bool state; /状态 reqtabitem;请求表还引入了支持快速插入和删除的list顺序容器来进行相关操作.list reqtable因为模拟设计的关系,页面的起始地址均应该为随机的数值,所以程序在设计过程中加入了随机数类的编写.class RandomNumberprivate: unsigned long randseed;public: RandomNumber(unsigned long s=0); unsi

6、gned short Random(unsigned long n); double fRandom(void);采用当前系统的时间值来生成伪随机数分配地址.定义随机数产生器:RandomNumber random 定义内存页面数:int pagenum 定义页面大小:int pagesize定义进程个数:int pnum用整数数组模拟分配的内存页面数int * mempage=new intpagenum2.3模块说明2.3.1 主函数主函数依次运行了程序中所实现的关键函数. int main() InitSys(); /初始化系统 MainChoice();/输出系统菜单 Destroy(

7、); /释放申请的动态内存 return 0;2.3.2 各个功能函数 初始化内存页面: void Init_Mempage(void)获取内存使用情况: int Get_Mempagenum(void)初始化默认的请求表: void Init_Reqtable(void)为默认的进程分配内存: void Init_DistMem(void)手动创建进程,并分配内存: void Dist_Mem(void)释放申请的动态内存: void Destroy(void)结束指定进程: void Kill(void) 2.3.3 打印函数 打印出进程请求表: void PrintReqtable(vo

8、id) 打印出页表: void PrintPageTable(void) 打印出内存使用情况: void PrintMem(void) 打印出物理块的大小: void PrintBlockSize(void)2.3.4 其他函数 初始化系统: void InitSys(void)输出主菜单: void MainMenu(void) 选择运行分支:void MainChoice() 3开发平台3.1开发平台(1) 使用系统:Windows 7(2) 使用语言:C+(3) 开发工具:Visual C+ 20084测试用例,运行结果与运行情况分析4.1测试方法 通过输入正常数据以及非正常数据对程序进

9、行全方位测试4.2测试结果(1)程序主界面(2)输入进程号和页面数:(3)显示进程页表:(4)显示请求表(5)显示内存使用情况以及物理块大小(6)错误检验5源程序的主要部分#include cstdlibiomaniplist#include page.hRandom.husing namespace std; reqtable;RandomNumber random; /随机数产生器unsigned pagenum=random.Random(80)+21; /内存页面数21-100unsigned pagesize=random.Random(16)+5; /页面大小 5-20 unsig

10、ned pnum=random.Random(4)+5;/进程的个数5-8int * mempage=new intpagenum; /用整数数组模拟内存页面数/*初始化内存页面*/void Init_Mempage(void) int i=0; for(i=0;iint(pagenum);i+) mempagei=0; /数组全部赋初值/*获取内存的使用情况*/ int Get_Mempagenum(void) int sum=0; for(int i=0; if(mempagei=0) sum+; return sum; /判断有多少内存页面已经被使用/*初始化默认的请求表*/void I

11、nit_Reqtable(void) int i; for(i=1;=int(pnum); reqtabitem preq; preq.pid=i; preq.reqpagenum=random.Random(4)+2;/进程请求的页面大小-5 preq.state=false; preq.pgtabadr=NULL; reqtable.push_back(preq); /依次压入容器 /*为默认的进程分配内存*/void Init_DistMem(void) int reqpnum; /进程请求页面数 listint(Get_Mempagenum() /判断请求的内存页面数目是否大于剩余的

12、cout没有足够的内存!endl; cout else (*pos).state=true; pagetable temp = new pgtabitemreqpnum; /新建临时页表项数组 if(temp=NULL) coutpid; for(list if(*pos).pid=pid) flag=true;该进程号已经存在,请重新输入 break; while(flag=true); /循环直到输入的Pid满足条件 preq.pid=pid; cout preq.reqpagenum=reqpnum; preq.state=false; preq.pgtabadr=NULL; reqpn

13、um=preq.reqpagenum; if(reqpnumGet_Mempagenum()没有足够的内存,进程创建失败! else preq.state=true; pagetable temp = new pgtabitemreqpnum; if(temp=NULL) exit(0); preq.pgtabadr=temp; for(i=0;int(reqpnum); tempi.pagenum=i; int randnum=random.Random(pagenum)+1; while(mempagerandnum=1) randnum=random.Random(pagenum)+1;

14、 tempi.blocknum=randnum; mempagerandnum=1; reqtable.push_back(preq); /将该进程的记录加入请求表/*程序结束时,释放申请的动态内存*/void Destroy(void) for(pos=reqtable.begin(); if(*pos).state=true) delete (*pos).pgtabadr; reqtable.clear();/* 打印出进程请求表*/void PrintReqtable(void)|-| 进程请求表 |setw(8)进程号 setw(16)请求页面数 页表起始地址页表长度状态 |-| (*

15、pos).pid (*pos).reqpagenum(*pos).pgtabadr(*pos).reqpagenum) * pagesize; if(*pos).state)setw(4)已分配 | else 未分配 | if(*pos).pid!=reqtable.back().pid)/*打印页表*/void PrintPageTable(void) if(*pos).pid=pid&(*pos).state=true) flag=true;|-| 此进程的页表 |页号setw(6)块号 | int reqpagenum=(*pos).reqpagenum;reqpagenum;(*pos

16、).pgtabadri.pagenum (*pos).pgtabadri.blocknum | if(i!=reqpagenum-1) cout else if(flag=false)系统中不存在该进程或者该进程还没有被分配内存!nvoid PrintMem(void)内存总块数为pagenum,已经使用了pagenum-Get_Mempagenum()块!现在还有Get_Mempagenum()块内存区域空闲!void PrintBlockSize(void)物理块大小为:pagesizeKB/*结束指定进程*/void Kill(void) bool flag; reqtabitem te

17、mp; for(pos=reqtable.begin(); temp=*pos; if(flag=false)系统中不存在该进程! while(flag=false);int(temp.reqpagenum); mempagetemp.pgtabadri.blocknum=0; reqtable.remove(temp); /重新为没有分配到内存的进程分配内存 if(*pos).state=false) int reqpnum; reqpnum=(*pos).reqpagenum; if(reqpnum=Get_Mempagenum() (*pos).state=true; pagetable temp = new pgtabitemreqpnum; if(temp=NULL) exit(0); (*pos).pgtabadr=temp; for(i=0; tempi.pagenum=i; int randnum=random.Random(pagenum)+1; while(mempagerandnum=1) randnum=random.Random(pagenum)+1; tempi.blocknum=randnum; m

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1