版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉理工大学操作系统课程设计说明书学 号:0120910340228课程设计题目模拟设计页式存储管理的分配与回收学院计算机科学与技术专业计算机科学与技术班级XX姓名XX指导教师XXX2011 年 01月 09 日ii武汉理工大学操作系统课程设计说明书课程设计任务书学生姓名: XX 专业班级: 计算机0902班指导教师:XXX工作单位:计算机科学与技术学院题 目:模拟设计页式存储管理的分配与回收初始条件:1 .预备内容:阅读操作系统的内存管理章节内容,了解有关虚拟存储器、页式存 储管理等概念,并体会页式管理内存的分配和回收过程。2 .实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务:(
2、包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1 .采用页式管理方案实施内存分配和回收。能够处理以下的情形 能够输入给定的内存页面数,页面大小,进程的个数及每个进程的页数。 要求当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资源后内存空间的使用情况(被进程占用的页面,空闲的页面) 。2 .设计报告内容应说明:课程设计目的与功能; 需求分析,数据结构或模块说明 (功能与框图); 源程序的主要部分;(4)测试用例,运行结果与运行情况分析; 自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的
3、收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他的其他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。时间安排:设计安排一周:周1、周2:完成程序分析及设计。周2、周3:完成程序调试及测试。 周4、周5:验收,撰写课程设计报告。(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日模拟设计页式存储管理的分配与回收1需求分析页式管理是一种内存空间存储管理的技术,页式管理分为静态页式管理和动态 页式管理。基本原理是将各进程的虚拟空间划分成若干个长度相等的页(page), 页式管理把内存空间按
4、页的大小划分成片或者页面(page frame),然后把页式 虚拟地址与内存地址建立对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。页式管理采用请求调页或预调页技术实现了内外存 存储器的 统一管理。1910 9页号P页内地址W8图1页的划分页号页面号图2基本页表小例静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。 系统通过存储页面表、请求表以及页表来完成内存的分配工作。 页表指的是内存中的一 块固定存储区。页式管理时每个进程至少有一个页表。请求表指的是用来确定作 业或进程的虚拟空间的各页在内存中的实际对应位置; 另外整个系统有一个存储 页面表,其描述了物理内存空间的分
5、配使用状况。进程号请求页面数曳曲始址负面长度120102420234104434318107813421 *图3请求表的示例存储页面表有两种构成方法:1、位示图法2、空闲页面链表法模拟设计页式存储管理的分配与回收要求能够满足如下的要求:(1)输入给定的内存页面数,页面大小,进程的个数及每个进程的页数。(2)要求当某进程提出申请空间的大小后,显示能否满足申请,以及为该进 程分配资源后内存空间的使用情况(被进程占用的页面,空闲的页面)2功能设计2.1 算法分析首先,请求表给出进程或作业要求的页面数。然后,由存储页面表检查是否 有足够的空闲页面,如果没有,则本次无法分配。如果有则首先分配设置页表,
6、并请求表中的相应表项后,按一定的查找算法搜索出所要求的空闲页面,并将对 应的页好填入页表中。图4分配页面的算法流程2.2 数据结构页式管理把内存空间按页的大小划分成片或者页面,再按照一定的规律建立 起页表,并通过请求表将分配内容显示出来.将页表和请求表的内容使用结构体 来定义是比较方便的./页表项结构typedef struct _pagetableitempageid pagenum;页号blockid blocknum;块号pgtabitem; 页表typedef pgtabitem * pagetable;/请求表结构typedef struct _reqtableunsigned pi
7、d;/进程号unsigned reqpagenum; 请求页面数pagetable pgtabadr; 页表始址bool state;状态 reqtabitem;请求表还引入了支持快速插入和删除的list顺序容器来进行相关操作list reqtable因为模拟设计的关系,页面的起始地址均应该为随机的数值,所以程序在 设计过程中加入了随机数类的编写.class RandomNumberprivate:unsigned long randseed;public:RandomNumber(unsigned long s=0);unsigned short Random(unsigned long n
8、);double fRandom(void);采用当前系统的时间值来生成伪随机数分配地址.定义随机数产生器:RandomNumber random定义内存页面数:int pagenum定义页面大小:int pagesize定义进程个数:int pnum用整数数组模拟分配的内存页面数int * mempage=new intpagenum2.3 模块说明2.3.1 主函数主函数依次运行了程序中所实现的关键函数.int main()InitSys();/初始化系统MainChoice();输出系统菜单Destroy。;/释放申请的动态内存return 0;2.3.2 各个功能函数初始化内存页面:v
9、oid 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(void) 打印出页表:void PrintPageTable(void) 打印出内存使用情况:voi
10、d PrintMem(void) 打印出物理块的大小:void PrintBlockSize(void)2.3.4 其他函数初始化系统:void InitSys(void) 输出主菜单:void MainMenu(void) 选择运彳T分支:void MainChoice()武汉理工大学操作系统课程设计说明书3开发平台3.1开发平台(1)使用系统:Windows 7(2)使用语言:C+(3)开发工具:Visual C+ 20084测试用例,运行结果与运行情况分析4.1 测试方法通过输入正常数据以及非正常数据对程序进行全方位测试4.2 测试结果(1)程序主界面 65”轨Huang学习相关阐保疏深
11、程命中飘页防治岂胖对岳与回收陈!8转。区8烟9骗进晦内物系您 5于示销示前人 式手显显撤显显退输 IM-LB.klfJei,1九程富统的(2)输入进程号和页面数 6U沁rHEJflng学习相关偎作系貌专程度小根挎页式印第本的方武与回收曲小弟 03#武汉理工大学操作系统课程设计说明书(3)显示进程页表:f中心悔9字习同段隹紧舒烹推观”模年口的开向定皑泗与回笈展同03咏23一配k刀2 7-面量 J- J. 面进页表i选号 口建程A程至统的程用大工页#青:.方不示销示套人久式手显显撤&显退箱i(4)显示请求表0U导” E w ng导刁用云段隹紧齐深框浸L,唱引口式枳i忠守腕满与亘曲5曰6总的(5)显
12、示内存使用情况以及物理块大小.LeF-uanm学三隹W飞冬汽手叁及、,每三二式孑哈三不四一配二回门”e(6)错误检验 cAU$用Huang学习相关果方西回收tRdea33。5启% LHgl程表况W 月大 I7)-20-i s:SQ5存 选后的内言建程末程存理薪程,存加不示销示一!人人足式手显显撤显显退 B0,3,4.5-L7.售清没ft的程表 也造天表况目一人 金白0 不阳山干 it 讲:该 选号在管建程求程停理统扪程仁内物番镀小 存功示示销小屯入入中式手显显描显显退 页l-e-B-ft-E-,r?,请耍 CL -SHuan不学习唱关抵作系讲洗4苴计甄页式于诸百歪的方元与回收、达用诃回时程哀况
13、月大理途页表e送UL:红 言建程求程存理统的程已 寿内与仔口示示销示lsA厂 式下显显撤显后 一Q :一二6.7.工页 1, 2L清输入进程号二5源程序的主要部分#include #include #include #include #include page.h#include Random.husing namespace std;list reqtable;RandomNumber random;碰机数产生器unsigned pagenum=random.Random(80)+21;附存页面数 21-100unsigned pagesize=random.Random(16)+5;灰面大
14、小 5-20unsigned 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;iint(pagenum);i+) if(mempagei=0)sum+;return sum; /判断有多少内存页面已
15、经被使用 /*初始化默认的请求表*/ void Init_Reqtable(void) int i;for(i=1;i=int(pnum);i+) 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;int i;list二iterator pos=
16、reqtable.begin();for(;pos!=reqtable.end();pos+)reqpnum=(*pos).reqpagenum;if(reqpnumint(Get Mempagenum() 判断请求的内存页面数目是否大cout”没有足够的内存!endl;coutendl;else(*pos).state=true;pagetable temp = new pgtabitemreqpnum; 新建临时页表项数组 if(temp=NULL) cout”内存分配失败!endl;exit(0);(*pos).pgtabadr=temp;for(i=0;ireqpnum;i+)temp
17、i.pagenum=i; /页表的页号.一int randnum=random.Random(pagenum)+1;/l 机产生一个块号 while(mempagerandnum=1)randnum=random.Random(pagenum)+1;tempi.blocknum=randnum;/页装的块号 mempagerandnum=1;/*手动创建进程,并分配内存*/void Dist_Mem(void)int i;reqtabitem preq;新创建进程记录int pid;进程号int reqpnum;/请求页面数bool flag=false;docoutpid;for(list:
18、iteratorif(*pos).pid=pid)pos=reqtable.begin();pos!=reqtable.end();pos+) flag=true;cout该进程号已经存在,请重新输入endl;coutendl;break;while(flag=true);/循环直到输入的Pid满足条件preq.pid=pid;coutreqpnum;preq.reqpagenum=reqpnum;preq.state=false;preq.pgtabadr=NULL;reqpnum=preq.reqpagenum;if(reqpnumGet_Mempagenum() cout没有足够的内存,
19、进程创建失败!endl; coutendl; elsepreq.state=true;pagetable temp = new pgtabitemreqpnum; if(temp=NULL)C cout”内存分配失败!endl;exit(0);preq.pgtabadr=temp;for(i=0;iint(reqpnum);i+)tempi.pagenum=i; /页表的页号.一int randnum=random.Random(pagenum)+1;/l 机产生一个块号 while(mempagerandnum=1)randnum=random.Random(pagenum)+1;reqta
20、ble.push_back(preq); /将该进程的记录加入请求表一tempi.blocknum=randnum;/页装的块号 mempagerandnum=1;/*程序结束时,释放申请的动态内存*/void Destroy(void)list二iterator pos=reqtable.begin();for(pos=reqtable.begin();pos!=reqtable.end();pos+) if(*pos).state=true)reqtable.clear();delete (*pos).pgtabadr;/*打印出进程请求表*/void PrintReqtable(void
21、) (coutendl;cout|endl;cout进程请求表|endl;cout|endl;cout setw(8)进程号setw(16)请求页面数setw(16)页表起始地址setw(16)页表长度setw(16)状态 |endl;cout|endl;list二iterator pos=reqtable.begin();for(pos=reqtable.begin();pos!=reqtable.end();pos+)(coutTsetw(8)(*pos).pidsetw(16)(*pos).reqpagenumsetw(16)(*pos).pgtabadrsetw(16)(*pos).r
22、eqpagenum) * pagesize;if(*pos).state)coutsetw(4)已分配 |endl;elsecoutsetw(4)未分配 |endl;if(*pos).pid!=reqtable.back().pid)cout|endl;elsecout|endl;)/*打印页表*/void PrintPageTable(void)(unsigned pid;int i;bool flag=false;coutpid;list二iterator pos=reqtable.begin();for(pos=reqtable.begin();pos!=reqtable.end();p
23、os+) (if(*pos).pid=pid&(*pos).state=true)(cout cout cout|endl;此进程的页表|endl;|endl;flag=true;coutsetw(16)页号setw(6)块号 |endl; cout|endl;int reqpagenum=(*pos).reqpagenum;for(i=0;ireqpagenum;i+)coutTsetw(16)(*pos).pgtabadri.pagenumsetw(6)(*pos).pgtabadri.blocknum |endl;if(i!=reqpagenum-1) cout|endl;else co
24、ut|endl;if(flag=false)cout”系统中不存在该进程或者该进程还没有被分配内存!n”;coutendl;void PrintMem(void)cout”内存总块数为 pagenum”,已经使用了 pagenum-Get_Mempagenum()块!endl;cout现在还有Get_Mempagenum()块内存区域空闲!endl;coutendl;void PrintBlockSize(void)Ccout物理块大小为:pagesizeKBendl;coutendl;/*结束指定进程*/void Kill(void)bool flag;int i;reqtabitem te
25、mp;list二iterator pos=reqtable.begin();int pid;docoutpid;for(pos=reqtable.begin();pos!=reqtable.end();pos+)if(*pos).pid=pid)flag=true;temp=*pos;break;if(flag=false)cout素统中不存在该进程!endl;coutendl;while(flag=false);or(i=0;iint(temp.reqpagenum);i+)mempagetemp.pgtabadri.blocknum=0;reqtable.remove(temp);/手新为
26、没有分配到内存的进程分配内存for(pos=reqtable.begin();pos!=reqtable.end();pos+)if(*pos).state=false)int reqpnum;reqpnum=(*pos).reqpagenum;if(reqpnum=Get_Mempagenum()(*pos).state=true;pagetable temp = new pgtabitemreqpnum;if(temp=NULL)Ccout”内存分配失败!endl;coutendl;exit(0);(*pos).pgtabadr=temp;for(i=0;iint(reqpnum);i+)
27、tempi.pagenum=i; /页表的页号 int randnum=random.Random(pagenum)+1;/ffi机产生一个块 while(mempagerandnum=1)randnum=random.Random(pagenum)+1; tempi.blocknum=randnum;页表的块号 mempagerandnum=1;/*初始化系统*/void InitSys(void)一cout.setf(ios二left);左对齐 Init_Mempage();Init_Reqtable(); Init_DistMem();*输出主菜单*/void MainMenu(void
28、)cout页式存储管理的分配与回收endl;cout1.手动仓建进程endl;cout2.显示逐程页表endl;cout3.显示请求表endl;cout4.撤销迸程endl;cout5.显示内存使用情况endl;cout6.显示物理块大小endl;cout7.退山系统endl;coutchoice;switch(choice)case 1:Dist_Mem();break;case 2:PrintPageTable();break;case 3:PrintReqtable();break;case 4:Kill();break;case 5:PrintMem();break;case 6:PrintBlockSize();break;case 7:break;default :cout输入有误,请重新输入.n; coutvvendl;break;while(choice!=7); int main()IInitSys();/初始化系统
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工程安装合同范本
- 合同样本:护士工作协议
- 技术研发合作合同范例
- 商品采购合同模板范本2024年
- 第24课《穿井得一人》公开课一等奖创新教学设计 统编版语文七年级上册
- M3型白血病研究报告
- 3《天窗》公开课一等奖创新教学设计(2课时)
- 4田家四季歌 公开课一等奖创新教学设计(表格式)
- 年产xxx检验信息系统项目建议书
- 钳形表项目可行性研究报告
- 核化学与放射化学智慧树知到期末考试答案2024年
- 煤矿复工复产培训课件
- 飞飞自动打怪脚本
- 火电电力职业技能鉴定考试-发电厂燃料管理笔试(2018-2023年)真题摘选含答案
- 血栓风险评估及个体化干预(遗传性易栓症风险基因检测)
- 认知各个层次的内涵
- 华为OLT设备新开与相关操作手册
- 《如何打造品牌》课件
- 稀有气体行业发展趋势
- 临床医生如何开展科学研究
- 关于夏商周法律性质的几点思考以曾宪义教授的《中国法制史》为主要参照
评论
0/150
提交评论