版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、012141087092学号:2课程设计课程计算机操作系统题目模拟设计存储管理的分配与回收学院计算机科学与技术学院专业计算机科学与技术班级计算机1404姓名王承禹精品感谢下载载指导教师王红霞2016年12月27日目录1 需求分析21.1 任务描述2.1.2 系统的功能需求2.2 功能设计32.1 算法分析3.2.2 数据结构4.2.2.1 页表结构4.2.3 模块说明4.2.3.1 内存模块4.2.3.2 进程模块5.2.3.3 主控模块5.2.3.4 错误处理模块6.3 开发平台73.1 开发平台7.4 运行结果与运行情况分析7.4.1 初始界面以及功能选项7.4.2 内存情况7.4.3 进
2、程页表信息8.5 自我评价与总结9.6 核心代码94.1 内存模块代码104.2 进程模块代码134.3 主控模块代码146成绩评定表16模拟设计页式存储管理的分配与回收1需求分析1.1 任务描述页式管理页式管理是一种内金间存储管理的技术,分为静态页式管理和动态页式管理。模拟动态页式管理,请求调页技术,将各进的勺虚拟空间划分成若干个长度相等的页,将内存划分成若干长度相等的页框。并且能完成逻辑地址到物理地址的转换。模拟虚拟存储器的工作。1.2 系统的功能需求(1)能够输入给定的内存页面数,页面大小,进程的个数及每个进程的页数。(2)当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配
3、资源后内存空间的使用情况(被进程占用的页面,空闲的页面)。(3)当某进程撤消时,显示内存回收后内存空间的使用情况。(4)实现缺页中断处理。2功能设计2.1 算法分析首先,请求表给出进程或作业要求的页面数。然后,由存储页面表检查是否有足够的空闲页面,如果没有,则本次无法分配。如果有则首先分配设置页表,并请求表中的相应表项后,按一定的查找算法搜索出所要求的空闲页面,并将对应的页好填入页表中。页面分配算法如图2.1所示。图2.1页面分配算法流程图2.2 数据结构页式管理把内存空间按页的大小划分成片或者页面,再按照一定的规律建立起页表2.2.1 页表结构structPageProcess*proces
4、sPtr;/进程指针int*memoryPage;/内存页号bool*valid;/页是否有效intsize;/有用页个数intpageSize;;2.3 模块说明采用了面向对象的设计方法,将模块分为内存模块、进程模块与主控模块。下面简要说明各个模块的接口与数据定义。2.3.1 内存模块classMemoryprivate:doubleallNum=1;/访问总次数doublemissNum=0;/不命中次数Process*processPtr;/进程指针数组int*allocateTime;/页被分配时的系统时间bool*valid;/内存页数组,标志页是否可用intfreeSize;/空闲
5、页数量intpageSize=2;staticMemory*instance;Memory。;public:staticMemory*getInstance();intgetPageNum();voidsetPageNum(intNum);intgetPageSize();voidsetPageSize(intSize);Process*getProcess(intindex)const;/获取进程指针intgetTime(intindex)const;/获取系统时间boolgetValid(intindex)const;/获取页是否可用intgetFreeSizse()constreturn
6、freeSize;/获取内存空闲页数量boolvalidIndex(intindex)const;/index是否有效intgetEarliestPage()const;/获取最早进入内存的页voidallocate(Process*ptr,intindex);/分配一个内存页给进程indexvoidallocateAll(Process*pr);/为所有进程页分配内存页voidrevoke();/释放一页voidrevoke(intmem);/释放一页voidrevokeProcess(Process*ptr);/释放进程的所有页voidprintInfo()const;/内存页信息;2.3
7、.2 进程模块classProcessprivate:stringname;/进程名doublesize;/进程大小,单位为MBintpageCount;/页数Page*page;/进程的页表public:Process(stringnm,doublesz);/默认构造函数stringgetName()constreturnname;/获取进程名doublegetSize()constreturnsize;intgetPageCount()constreturnpageCount;Page*getPage()constreturnpage;voidprintInfo()const;/输出进程信
8、息;2.3.3 主控模块intmain()Memory*memory=Memory:getInstance();/内存指针Process*process=newProcess*MAX_PROCESS_SIZE;/进程指针数组/初始化进程指针数组for(inti=0;i<MAX_PROCESS_SIZE;i+)process。=NULL_PTR;init();intselect=-1;/操作编号do"<< endl;cout<<"n=菜单=cout<<"1.创建进程n2.分配进程所有页n3.分配进程一页n4.释放进程&quo
9、t;<<endl;cout<<"5.释放进程一页n6.内存状态n7.进程状态n8.页表信息n9.退出"<<endl;cout<<"n操作编号:";/正确地输入编号docin>>select;if(cin.fail()badInput();/输入流错误elseif(select<1|select>9)cout<<"n操作编号错误!"<<endl;elsebreak;while(true);switch(select)case1:op1(mem
10、ory,process);break;case2:op2(memory,process);break;case3:op3(memory,process);break;case4:op4(memory,process);break;case5:op5(memory,process);break;case6:op6(memory,process);break;case7:op7(memory,process);break;case8:op8(memory,process);break;case9:break;default:cout<<"n怎么会运行到这里?"<
11、;<endl;break;while(select!=9);return0;2.3.4 错误处理模块classErrorprivate:stringinfo;/异常信息public:Error():info("Error:exceptionoccured!")Error(stringi):info(i)stringgetInfo()constreturninfo;3开发平台3.1开发平台(1)操作系统:Windows10(2)开发语言:C+(3)开发环境:VisualStudio2015Community本程序米用C+作为编程语言,用visualstudio2015进
12、行开发。C+是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C+擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。4运行结果与运行情况分析HCWW口口产:um二2二ed,uxu1,创建速程匕内停状态 工逢程状态 工次力信息 乱退出分配进程所有页各配进程一页您放遴程移改进程一页累作编号:4.1 初始界面以及功能选项4.2 内存情况cu Ip ini. tx作编号:66分配的闻:7分配时间: 分配时间:奇配时(旬: 分配时间;配时间:分配时间:0 分配时间:1 分配时间;2 分配时间;
13、3*内存状态到 内存页信患如下:分I39S 9:4:50123Si L:W N DCWSsyitem i Zcmd.eKe页和程态态息 的放存倒有出 帮释内进页退4E 6 Li王U王EF 口王匚上口工。王nF口王口土 进进讲进进进进讲a进 属属国属属再属1属属 所所所所所所所所4.3 进程页表信息CiWINDO32crrid.ewe程程程程程态态息 进进进进进状状信 建配配放放存程表出 创分分释释内进页退=输出进程页表信息=贝员页员* -01234 表口干及口z:!匹程名:A内存页号:0内存页号:1内存页号:2内存页号:3内存页号:4告歌拼音输法2半:5自我评价与总结(1)本次实验中我认为完成
14、的比较好的工作有模块设计和编码以及分配算法的实现。其中模块分为了内存、进程以及主控模块三部分。可以方便的完成内存分配算法的转换,具有较高的独立性,同时也可以方便的完成分页到分段的转换,采用的调度算法也有较高的独立性。可见,一个模块独立性高的系统,具变更与扩展都会变得十分容易。其次,在页面置换算法的选择上,我选择了先进先出算法,该算法易于实现,而且不命中率与随机置换算法的不命中率都比较低,是比较理想的页面置换算法。(2)需求分析时对题目的理解不完全正确,造成了实现的系统功能不符合要求,例如,在内存中应该给每个进程分配一定数量的块,而我的实现中并没有这样做,而是一个进程最极端的情况下可以占用所有内
15、存,并且一个进程可以替换其他进程的页面。这一点是由于没有完全理解实验要求和对页式虚拟存储器理解有误造成的。同时这样也给系统带来了很大的影响。我吸取到的教训是,需求分析阶段就要搞清楚问题所在,在问题不明确的情况下,不能贸然着手实现系统,否则实现的系统讲没有意义。(3)本次设计中,在编写、调试、执行的过程中,我熟悉了页式存储管理的各个置换算法与分配方法,以及回收方法。同时,在实现系统的过程中,我在需求分析阶段没有搞清楚问题,以至于系统功能有误,这都是很好的经验和教训。6核心代码6.1内存模块代码classMemoryprivate:doubleallNum=1;doublemissNum=0;Pr
16、ocess*processPtr;/进程指针数组int*allocateTime;/页被分配时的系统时间bool*valid;/内存页数组,标志页是否可用intfreeSize;/空闲页数量intpageSize=2;staticMemory*instance;Memory。;public:staticMemory*getInstance();intgetPageNum();voidsetPageNum(intNum);intgetPageSize();voidsetPageSize(intSize);Process*getProcess(intindex)const;/获取进程指针intge
17、tTime(intindex)const;/获取系统时间boolgetValid(intindex)const;/获取页是否可用intgetFreeSizse()constreturnfreeSize;/获取内存空闲页数量boolvalidIndex(intindex)const;/index是否有效intgetEarliestPage()const;/获取最早进入内存的页voidallocate(Process*ptr,intindex);/分配一个内存页给进程indexvoidallocateAll(Process*pr);/为所有进程页分配内存页voidrevoke();/释放一页voi
18、drevoke(intmem);/释放一页voidrevokeProcess(Process*ptr);/释放进程的所有页voidprintInfo()const;/内存页信息;默认构造函数,私有Memory:Memory()valid=newboolpageNum;processPtr=newProcess*pageNum;allocateTime=newintpageNum;freeSize=pageNum;/初始化:页标志、进程指针、分配时间for(inti=0;i<pageNum;i+)validi=true;processPtri=NULL_PTR;allocateTimei=
19、-1;intMemory:getPageNum()returnpageNum;intMemory:getPageSize()returnpageSize;voidMemory:setPageNum(intNum)pageNum=Num;voidMemory:setPageSize(intSize)pageSize=Size;Memory*Memory:instance=newMemory。;/获取单例Memory*Memory:getInstance()returninstance;/获取进程指针Process*Memory:getProcess(intindex)constif(validI
20、ndex(index)returnprocessPtrindex;错误的下标!");elsethrowError("Error:inMemory:getProcess(),/获取系统时间intMemory:getTime(intindex)constif(validlndex(index)returnallocateTimeindex;elsethrowError("Error:inMemory:getTime(),错误的下标!");/获取页是否可用boolMemory:getValid(intindex)constif(validlndex(index
21、)returnvalidindex;elsethrowError("Error:inMemory.getValid(),错误的下标!");/index是否有效boolMemory:validIndex(intindex)constif(index<0|index>=pageNum)returnfalse;elsereturntrue;/获取最早进入内存的页intMemory:getEarliestPage()constintmin=MAX_TIME;/最小分配时间intpos=-1;/最早进入的页for(inti=0;i<pageNum;i+)if(all
22、ocateTimei!=-1&&allocateTimei<min)pos=i;min=allocateTimei;returnpos;/分配内存页给进程页indexvoidMemory:allocate(Process*ptr,intindex)Page*page=ptr->getPage();if(page->getValid(index)throwError("Error:页已在内存中!");if(freeSize<=0)revoke();/释放一页/开始分配for(inti=0;i<pageNum;i+)if(valid
23、i)/找到空闲页try/更新进程信息,可能抛出异常page->allocate(index,i);/更新内存信息processPtri=ptr;allocateTimei=time+;validi=false;freeSize-;第 "<< index <<cout<<"分配内存页"<<i<<"给进程"<<ptr->getName()<<"页."<<endl;break;catch(Errore)cout<<
24、;e.getInfo()<<endl;6.1 进程模块代码classProcessprivate:stringname;/进程名doublesize;/进程大小,单位为MBintpageCount;/页数Page*page;/进程的页表public:Process(stringnm,doublesz);/默认构造函数/获取进程信息stringgetName()constreturnname;doublegetSize()constreturnsize;intgetPageCount()constreturnpageCount;Page*getPage()constreturnpag
25、e;/输出进程信息voidprintInfo()const;/默认构造函数进程大小参数错误,构造失败!”);Process:Process(stringnm,doublesz)/if(sz<=0|sz>=pageNum)throwError("Error:intnameSize=nm.size();进程名长度错误,允许的长度if(nameSize<=0|nameSize>MAX_NAME_SIZE)throwError("Error:为110!");name=nm;size=sz;/进程大小doubletemp=size-(int)size
26、;if(temp=0)pageCount=size;elsepageCount=size+1;/新建页表page=newPage(this,pageCount);/输出进程信息voidProcess:printInfo()constcout<<"进程名:"<<name<<endl;cout<<"大小:"<<size<<endl;cout<<"页数:"<<pageCount<<endl;#endif6.2 主控模块代码intmain()Memory*memory=Memory:getInstance();/内存指针Process*process=newProcess*MAX_PROCESS_SIZE;/进程指针数组/初始化进程指针数组for(inti=0;i<MAX_PROCESS_SIZE;i+)process。=NULL_PTR;init();精品intselect=-1;/操作编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年收银审核员真题含完整答案详解【典优】
- 2026年消防条令纲要知识考试模拟试卷及参考答案详解(培优A卷)
- 残疾人按摩室制度
- 格构立柱基础施工方案
- 确保资源合理配置优化决策路径
- 营口咖啡师职业冲刺押题卷
- 2026年设施栽培技术押题宝典通关考试题库含答案详解【模拟题】
- 2026元宇宙社交平台用户增长与变现模式分析报告
- 2026年口腔颌面外科考前冲刺练习试题含答案详解【培优A卷】
- 磁场对带电粒子及几何磁场对涡旋光的调控
- 山东省聊城市2026年普通高中学业水平等级考试模拟卷(聊城二模)地理+答案
- 成都益民集团所属企业2026年招聘贸易部副部长等岗位考试模拟试题及答案解析
- 公共场所反恐防范标准(2025版)
- 2026山东省鲁信投资控股集团有限公司校园招聘30人备考题库附答案详解(a卷)
- 2026年急性缺血性卒中患者早期管理-美国心脏协会指南
- 2026年台州临海市粮食收储有限公司招聘工作人员5人建设笔试备考题库及答案解析
- 2025学年第二学期杭州市高三年级二模教学质量检测英语试卷+答案
- GA/T 2348-2025信息安全技术网络安全等级保护5G接入安全测评要求
- DB42∕T 1528-2026 湖北省农业用水定额
- 2026年两会政府工作报告精神宣讲《聚焦两会关注民生》
- 船舶代理公司考核制度
评论
0/150
提交评论