操作系统课程设计 模拟设计页式存储管理的分配与回收范文_第1页
操作系统课程设计 模拟设计页式存储管理的分配与回收范文_第2页
操作系统课程设计 模拟设计页式存储管理的分配与回收范文_第3页
操作系统课程设计 模拟设计页式存储管理的分配与回收范文_第4页
操作系统课程设计 模拟设计页式存储管理的分配与回收范文_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学 号:28课程设计模拟设计页式存储管理的分题目配与回收学院计算机科学与技术专业计算机科学与技术班级XX姓名XX指导教师XXX2011 年 01月 09 日课程设计任务书学生姓名:XX专业班级:计算机0902班指导教师:XXX工作单位:计算机科学与技术学院课程设计目的与功能;需求分析,数据结构或模块说明 (功能与框图);源程序的主要部分;测试用例,运行结果与运行情况分析;自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训)iv)完成本题是否有其他的其他方法(如果有,简要说明

2、该方法) V)对实验题的评价和改进意见,请你推荐设计题目。设计安排一周:周周周1、周2、周4、周(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)模拟设计页式存储管理的分配与回收初始条件:1.预备内容:阅读操作系统的内存管理章节内容,了解有关虚拟存储器、页式存 储管理等概念,并体会页式管理内存的分配和回收过程。2 .实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写 等具体要求)1.采用页式管理方案实施内存分配和回收。能够处理以下的情形 能够输入给定的内存页面数,页面大小,进程的个数及每个进程的页数。 要求当某进程提出申请空间的大

3、小后,显示能否满足申请,以及为该进程分配资源后内存空间的使用情况(被进程占用的页面,空闲的页面)2 .设计报告内容应说明:时间安排:2:完成程序分析及设计。3:完成程序调试及测试。5:验收,撰写课程设计报告。指导教师签名:系主任(或责任教师)签名:武汉理工大学操作系统课程设计说明书模拟设计页式存储管理的分配与回收1需求分析页式管理是一种内存空间存储管理的技术,页式管理分为静态页式管理和动态页式管理。基本原理是将各进程的虚拟空间划分成若干个长度相等的页(Page),页式管理把内存空间按页的大小划分成片或者页面(page frame),然后把页式虚拟地址与内存地址建立 对应页表,并用相应的硬件地址

4、变换机构,来解决离散地址变换问题。页式管理采用请求调页或预调页技术实现了内外存 存储器的统一管理。1910 9页内地址n图1页的划分页号页面号图2基本页表示例#静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统通过存储页面表、请求表以及页表来完成内存的分配工作。页表指的是内存中的一一块固定存储区。页式管理时每个进程至少有一个页表。请求表指的是用来确定作业或进程的虚拟空间的各页在内存中的实际对应位置;另外整个系统有一个存储页面表,其描述了物理内存空间的分配使用状况。谙求贡面数页面始址页面长度123420341821102410441073203413图3请求表的示例存储页面表有两种

5、构成方法:1、位示图法2、空闲页面链表法模拟设计页式存储管理的分配与回收要求能够满足如下的要求(1)输入给定的内存页面数,页面大小,进程的个数及每个进程的页数。要求当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资源后内存空间的使用情况(被进程占用的页面,空闲的页面)。武汉理工大学操作系统课程设计说明书2功能设计2.1算法分析首先,请求表给出进程或作业要求的页面数。然后,由存储页面表检查是否有足够的空闲页面,如果没有,则本次无法分配。如果有则首先分配设置页表,并请求表中的相应表项后,按一定的查找算法搜索出所要求的空闲页面,并将对应的页好填入页表中。图4分配页面的算法流程92.2

6、 数据结构页式管理把内存空间按页的大小划分成片或者页面 ,再按照一定的规律建立起页表 ,并通过请求表将分配内容显示出来 .将页表和请求表的内容使用结构体来定义是比较方便的 ./页表项结构typedef struct _pagetableitempageid pagenum;/页号blockid blocknum;/块号pgtabitem;/页表typedef pgtabitem * pagetable;/请求表结构typedef struct _reqtableunsigned pid;/进程号unsigned reqpagenum;/请求页面数pagetable pgtabadr;/页表始址

7、/状态bool state; reqtabitem;请求表还引入了支持快速插入和删除的 list 顺序容器来进行相关操作 .list reqtable因为模拟设计的关系,页面的起始地址均应该为随机的数值,所以程序在设计过程中加入了随机数类的编写.class Ran domNumberp rivate:un sig ned long ran dseed;p ublic:Ran domNumber( un sig ned long s=0);un sig ned short Ran dom (un sig ned long n);double fRan dom(void);采用当前系统的时间值来生

8、成伪随机数分配地址定义随机数产生器:RandomNumber random定义内存页面数:int P age num定义页面大小:int Pagesize定义进程个数:int pnum用整数数组模拟分配的内存页面数 int * mem page=new in t page num2.3模块说明2.3.1 主函数主函数依次运行了程序中所实现的关键函数int mai n()Ini tSys();初始化系统Ma in Choice。;/输出系统菜单Destroy();释放申请的动态内存return 0;2.3.2 各个功能函数初始化内存页面 : void Init_Mempage(void)获取内存

9、使用情况 : 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)打印出内存使用情况 : void PrintMem(vo

10、id) 打印出物理块的大小 : void PrintBlockSize(void)2.3.4 其他函数初始化系统 : void InitSys(void) 输出主菜单 : void MainMenu(void)选择运行分支 :void MainChoice()武汉理工大学操作系统课程设计说明书3开发平台开发平台3.1(1)使用系统:Win dows 7使用语言:C+开发工具:Visual C+ 20084测试用例,运行结果与运行情况分析4.1测试方法通过输入正常数据以及非正常数据对程序进行全方位测试4.2测试结果(1)程序主界面(2)输入进程号和页面数:cWsb蓟HjmnE学习箱关谁件系抵穿握

11、设讯需氏如離注咖鸯与回恃记询“6Ge与配分理a贝表管建程箱仔豐统的程适汁 冇动示示销示一甭入入入 式手显显撤SS退按迪啊 .貝X H匕清煌頂(3)显示进程页表:1-#幻间建iij翟2.見示進稈 h-StkI青求裘叵收电撤轄应程隔蠶霖ft7退出系统港攒A您的进fi畑V=2 禺备入ft程号= 2H12,;11汉号按号;id1胸!1il74i!2I25!I13401i463i.河矶HuEPig停习轲天谡乍基飪危设V气赫拥存fl希進能御&与目闵尺n圍 S2(4)显示请求表EU却铳HudPigL字习云谡乍基抵据试计惜讯口決烯首至as分SG与回cr用I轴汨gG亡|l j冋a进程请求羔tSl;tt程号请求贝

12、直数页表起戈fet也址狀态ii06271904e三分配HUZ7197024m分配J3nB2719A32玄配:4QBZ719D8m分配nB27infln24:6QBZ71A3e32巳方配!798271Ab8le已务配IS90271AASZ4分配:291298271BOBle武汉理工大学操作系统课程设计说明书(5)显示内存使用情况以及物理块大小15-Im天蛙件議宛弄疑眾严擢近式沁眾的行氐与回紹曰曲m毎己ten耀表存由示示销示蛋厶思込 式手E-iinffl页霞冃刘I择53內S酉分的程表澀逹反表一 :C 青建SWM:理统的小 nsrttBA 存幻丞isA 式于显髭检显显進输理 页C4.牡畀霞请物0 K

13、9择江(6)错误检验GUwmHwn?谆习花关海作茶淀挥呈Sm翩更式于诸言哩的汙粘 回禺紹匕咖眄说亍收回酉分的程表理遗页表 I第程存理统的程養 存幻亦示销示入入足 式手显页请a况冃人1贩夷1 M建 择?县的内鼾表 JS?7 直一 桿5拼择浬说理注贡表1选昙存 骨建裡求程存理统的程带 存中示一小销迈盘入入中 式手屋显旬丄二二请禀武汉理工大学操作系统课程设计说明书-o回匚配J晋表匹送仄表罪言建琴程存理统対徨一 喘迸将內切希嘗存初丕_小销示=05人入程 师兀人言言文况 月入弟人进程号:255源程序的主要部分#i nclude #i nclude #i nclude #i nclude #in clud

14、e p age.h #in clude Ra ndom.h using n ames pace std;listvreqtabitem reqtable;Ran domNumber ran dom; /随机数产生器unsigned pagenum=random.Random(80)+21;内存页面数 21-100unsigned pagesize=random.Random(16)+5;页面大小 5-20unsigned pnum=random.Random(4)+5;进程的个数 5-8int * memp age=new in t page num; /用整数数组模拟内存页面数 /*初始化内

15、存页面*/ void In it_Me mp age(void)int i=0;for(i=0;i int(p age nu m);i+)memp agei=0;数组全部赋初值/*获取内存的使用情况*/ int Get_Me mp age nu m(void)int sum=0;for(i nt i=0;i int(p age nu m);i+) if(me mp agei=0) sum+;return sum;判断有多少内存页面已经被使用 /*初始化默认的请求表*/void Ini t_Reqtable(void)int i;for(i=1;i=i nt( pnu m);i+)reqtabi

16、tem preq;preq.pid=i;一,preq.reqpagenum=random.Random(4)+2;进程请求的页面大小-5 p req.state=false;preq.p gtabadr=NULL;reqtable. push_back( preq); /依次压入容器 /*为默认的进程分配内存 */ void Init_DistMem(void)int reqpnum; int i;/进程请求页面数list:iterator pos=reqtable.begin();for(;pos!=reqtable.end();pos+)reqpnum=(*pos).reqpagenum;

17、if(req pnu mi nt(Get_Me mp age num() /判断请求的内存页面数目是否大 于剩余的coutvv没有足够的内存!endl; coutendl;else(*pos).state=true;pagetable temp = new pgtabitemreqpnum; /新建临时页表项数组 if(temp=NULL)coutvv内存分配失败!endl;exit(0);(*pos).pgtabadr=temp;for(i=0;ipid;for(listvreqtabitem:iteratorpos=reqtable.begin();pos!=reqtable.end();

18、pos+)if(*pos).pid=pid)flag=true;coutvv该进程号已经存在,请重新输入vvendl; coutvve ndl;break;while(flag=true);循环直到输入的Pid满足条件preq.pid=p id;coutvv请输入需要的页面数:;cinreqpnum;preq.reqp age num=reqpnum;p req.state=false;preq.p gtabadr=NULL;reqpnum=preq.reqp age num; if(reqpnum Get_Me mp age num()coutvv没有足够的内存,进程创建失败!endl; c

19、outvve ndl;elsep req.state=true;p agetable temp = new p gtabitemre qpnu m; if(te mp=NULL)coutvv内存分配失败!endl; exit(0);preq.p gtabadr=te mp; for(i=0;iv in t(re qpnu m);i+)temp i. page num=i; 页表的页号int randnum=ran dom.Ra ndom( page nu m)+1;随机产生一个块号 while(me mp agera ndnu m=1)randnum=ran dom.Ra ndom(pagen

20、u m)+1;temp i.block num=randnum;/页表的块号 memp agera ndnum =1;reqtable. push_back( preq); 将该进程的记录加入请求表 /*程序结束时,释放申请的动态内存*/void Destroy(void)list:iterator po s=reqtable.begi n(); for(po s=reqtable.begi n();p os!=reqtable.e nd( );po s+)if(* po s).state=true)delete (* po s). pgtabadr;reqtable.clear();/* 打

21、印出进程请求表 */ void PrintReqtable(void)coutendl;cout|cout|endl;cout|coutvv vvsetw(8)vv进程号setw(16):iterator p os=reqtable.beg in(); for(pos=reqtable.begin();pos!=reqtable.end();pos+)|endl; 进程请求表|endl;|endl;coutvv|vvsetw(8)vv(*pos).pid vvsetw(16)vv(*pos).reqpagenum vvsetw(16)vv(*pos).pgtabadr vvsetw(16)vv

22、(*pos).reqpagenum) * pagesize;if(*pos).state)coutvvsetw(4)vv已分配|e ndl;elsecoutvvsetw(4)vv未分配|vve ndl;if(*pos).pid!=reqtable.back().pid)cout|else|endl;cout|pid;list:iterator pos=reqtable.begin();for(pos=reqtable.begin();pos!=reqtable.end();pos+)if(*pos).pid=pid&(*pos).state=true)flag=true; coutvv|- c

23、outvv| coutvv|- coutvv wsetwGIvv页号 wsetweivv块号coutvv| |vvendl; 此进程的页表|vvendl; |vvendl;endl;endl;int reqp age num=(* po s).re qp age num; for(i=0;ire qp age nu m;i+)coutvv|vvsetw(16)vv(* pos). pgtabadri. page num vvsetw(6)vv(* pos). pgtabadri.block num vv if(i!=re qp age nu m-1) coutvv|elsecoutvv|vve

24、 ndl;|e ndl;|vve ndl;!n;if(flag=false)coutvv系统中不存在该进程或者该进程还没有被分配内存 coutvve ndl;使用了void Prin tMem(void)coutvv内存总块数为 vv page nu mvv,已经 vvp age nu m-Get_Me mp age num()vv块!vve ndl;coutvv现在还有vvGet_Mempagenum()vv块内存区域空闲!vvendl; coutvve ndl; void Prin tBlockSize(void)coutvv物理块大小为:iterator po s=reqtable.be

25、gi n(); int p id;docoutvv请输入进程号:;flag=false;cinp id;for(po s=reqtable.beg in();p os!=reqtable.e nd( );po s+)if(* pos). pid=pid)flag=true; temp=*pos; break;if(flag=false)coutvv系统中不存在该进程!vvendl; coutvve ndl;while(flag=false);for(i=0;iv in t(te mp.reqp age nu m);i+)mempagetemp.pgtabadri.blocknum=0;reqt

26、able.remove(temp);/重新为没有分配到内存的进程分配内存for(pos=reqtable.begin();pos!=reqtable.end();pos+)if(*pos).state=false)int reqpnum; reqpnum=(*pos).reqpagenum; if(reqpnumv=Get_Mempagenum()(*pos).state=true;pagetable temp = new pgtabitemreqpnum; if(temp=NULL)coutvv内存分配失败vvendl; coutvvendl;exit(0);(*pos).pgtabadr=

27、temp;for(i=0;iint(reqpnum);i+)tempi.pagenum=i; /页表的页号int randnum=random.Random(pagenum)+1;随机产生一个块while(mempagerandnum=1)randnum=random.Random(pagenum)+1;temp i.block num=randnum;/页表的块号 mempagerandnum=1;/* 初始化系统 */void InitSys(void)cout.setf(ios:left);/ 左对齐 Init_Mempage(); Init_Reqtable(); Init_DistM

28、em();/* 输出主菜单 */void MainMenu(void)coutvv页式存储管理的分配与回收endl; coutvv1.手动创建进程endl;cout2.显示进程页表endl;cout3.显示请求表endl;cout4.撤销进程endl;cout5.显示内存使用情况endl;cout6.显示物理块大小endl;cout7.退出系统 choice; switch(choice) case 1:Dist_Mem(); break;case 2:PrintP ageTableO; break;case 3:Prin tReqtableO; break;case 4:Kill();break;case 5:Prin tMem(); break;case 6:Prin tBIockSizeO;break;case 7:breakdefault :coutvv输入有误,请重新输入.n; coutvve ndl;break;while(choice!=7); int main()In itSysO;/初始化系

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论