版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.专业整理 .学号:0121410870922课程设计课程计算机操作系统题目模拟设计存储管理的分配与回收学院计算机科学与技术学院专业计算机科学与技术班级计算机 1404姓名王承禹指导教师王红霞.学习帮手 .专业整理 .2016年12月27日.学习帮手 .专业整理 .目录1 需求分析 .21.1任务描述 .21.2系统的功能需求 .22 功能设计 .32.1算法分析 .32.2数据结构 .42.2.1页表结构 .42.3模块说明 .42.3.1内存模块 .42.3.2进程模块 .52.3.3主控模块 .52.3.4错误处理模块 .63 开发平台 .73.1开发平台 .74 运行结果与运行情况分析
2、 .74.1初始界面以及功能选项 .74.2内存情况 .74.3进程页表信息 .8.学习帮手 .专业整理 .5自我评价与总结 .96核心代码 .94.1内存模块代码 .104.2进程模块代码 .134.3主控模块代码 .146成绩评定表 .16.学习帮手 .专业整理 .模拟设计页式存储管理的分配与回收1 需求分析1.1 任务描述页式管理页式管理是一种 内存空间存储管理的技术 ,分为静态页式管理和动态页式管理。 模拟动态页式管理 ,请求调页技术 ,将各 进程的虚拟空间划分成若干个长度相等的页,将内存划分成若干长度相等的页框 。并且能完成逻辑地址到物理地址的转换 。 模拟虚拟存储器的工作 。1.2
3、 系统的功能需求( 1)能够输入给定的内存页面数 ,页面大小 ,进程的个数及每个进程的页数 。( 2)当某进程提出申请空间的大小后 ,显示能否满足申请 ,以及为该进程分配资源后 内存空间的使用情况 (被进程占用的页面 ,空闲的页面 )。( 3)当某进程撤消时 ,显示内存回收后内存空间的使用情况 。( 4)实现缺页中断处理 。2 功能设计2.1 算法分析首先,请求表给出进程或作业要求的页面数 。 然后,由存储页面表检查是否有足够的空闲页面 ,如果没有 ,则本次无法分配 。如果有则首先分配设置页表 ,并请求表中的相应表项后 ,按一定的查找 算法搜索出所要求的空闲页面 ,并将对应的页好填入页表中 。
4、页面分配算法如图2.1 所示 。.学习帮手 .专业整理 .请求 n 个页面剩余页面数 =N ?设置页表, 将页面始址, 页表长无法分配度置入请求表, 状态置为已分配搜索空闲页面表,分配N 个页面,并将页面号填入页表返回图 2.1 页面分配算法流程图2.2 数据结构页式管理把内存空间按页的大小划分成片或者页面,再按照一定的规律建立起页表2.2.1 页表结构struct Page Process* processPtr;/ 进程指针.学习帮手 .专业整理 .int * memoryPage;/ 内存页号bool * valid;/ 页是否有效int size;/ 有用页个数int pageSize
5、;2.3 模块说明采用了面向对象的设计方法,将模块分为内存模块、进程模块与主控模块。下面简要说明各个模块的接口与数据定义。2.3.1 内存模块class Memory private :doubleallNum=1; / 访问总次数doublemissNum = 0;/ 不命中次数Process* processPtr; / 进程指针数组int * allocateTime;/ 页被分配时的系统时间bool * valid;/ 内存页数组 ,标志页是否可用int freeSize;/ 空闲页数量int pageSize = 2;static Memory* instance;Memory();
6、public :.学习帮手 .专业整理 .static Memory* getInstance();int getPageNum();void setPageNum( int Num);int getPageSize();void setPageSize( int Size);Process* getProcess( int index) const ;/ 获取进程指针int getTime( int index) const ;/ 获取系统时间bool getValid( int index) const ;/ 获取页是否可用int getFreeSizse() const return f
7、reeSize; / 获取内存空闲页数量bool validIndex( int index) const ;/index是否有效int getEarliestPage() const ;/ 获取最早进入内存的页void allocate(Process* ptr,int index);/ 分配一个内存页给进程indexvoid allocateAll(Process* pr);/ 为所有进程页分配内存页void revoke();/ 释放一页void revoke( int mem);/ 释放一页void revokeProcess(Process* ptr);/ 释放进程的所有页void
8、printInfo() const ;/ 内存页信息;2.3.2 进程模块class Process private :.学习帮手 .专业整理 .stringname;/ 进程名doublesize;/ 进程大小 ,单位为 MBint pageCount;/ 页数Page* page;/ 进程的页表public :Process(stringnm, double sz); / 默认构造函数string getName() const return name; / 获取进程名doublegetSize() const return size; int getPageCount() const r
9、eturn pageCount; Page* getPage() const return page; void printInfo() const ;/ 输出进程信息;2.3.3 主控模块int main() Memory * memory =Memory :getInstance();/ 内存指针Process* process =new Process*MAX_PROCESS_SIZE;/ 进程指针数组/ 初始化进程指针数组for ( int i = 0; i MAX_PROCESS_SIZE; i+)processi = NULL_PTR;init();.学习帮手 .专业整理 .int
10、 select = -1;/ 操作编号do cout n=菜单 = endl;cout 1.创建进程 n2. 分配进程所有页 n3. 分配进程一页 n4. 释放进程 endl;cout 5.释放进程一页 n6. 内存状态 n7. 进程状态 n8. 页表信息 n9. 退出 endl;cout select;if (cin.fail() badInput();/ 输入流错误else if (select 9) coutn操作编号错误 ! endl;else break ; while( true );switch(select) case 1:op1(memory, process);break
11、;case 2:op2(memory, process);break ;case 3:op3(memory, process);break ;case 4:op4(memory, process);break ;case 5:op5(memory, process);break ;case 6:op6(memory, process);break ;case 7:op7(memory, process);break ;.学习帮手 .专业整理 .case 8:op8(memory, process);break ;case 9: break ;default :cout n怎么会运行到这里 ?
12、endl;break ; while (select != 9); return 0;2.3.4 错误处理模块class Error private :string info;/ 异常信息public :Error() :info( Error: exception occured!) Error( stringi) :info( i) string getInfo() const return info; ;3 开发平台3.1 开发平台( 1)操作系统 :Windows10( 2)开发语言 :C+( 3)开发环境 :Visual Studio 2015 Community.学习帮手 .专业整
13、理 .本程序采用 C+ 作为编程语言 ,用 visual studio 2015进行开发 。 C+ 是 C 语言的继承,它既可以进行 C 语言的过程化程序设计 ,又可以进行以抽象数据类型为特点的基于对象的程序设计 ,还可以进行以继承和多态为特点的面向对象的程序设计。C+ 擅长面向对象程序设计的同时 ,还可以进行基于过程的程序设计。4 运行结果与运行情况分析4.1 初始界面以及功能选项4.2 内存情况.学习帮手 .专业整理 .4.3 进程页表信息.学习帮手 .专业整理 .5 自我评价与总结( 1)本次实验中我认为完成的比较好的工作有模块设计和编码以及分配算法的实现。其中模块分为了内存、进程以及主
14、控模块三部分。可以方便的完成内存分配算法的转换,具有较高的独立性,同时也可以方便的完成分页到分段的转换,采用的调度算法也有较高的独立性 。可见 ,一个模块独立性高的系统,其变更与扩展都会变得十分容易。其次,在页面置换算法的选择上 ,我选择了先进先出算法 ,该算法易于实现 ,而且不命中率与随机置换算法的不命中率都比较低 ,是比较理想的页面置换算法 。( 2)需求分析时对题目的理解不完全正确 ,造成了实现的系统功能不符合要求 ,例如,在内存中应该给每个进程分配一定数量的块 ,而我的实现中并没有这样做 ,而是一个进程最极端的情况下可以占用所有内存 ,并且一个进程可以替换其他进程的页面 。 这一点是由
15、于没有完全理解实验要求和对页式虚拟存储器理解有误造成的。同时这样也给系统带来了很大的影响。我吸取到的教训是,需求分析阶段就要搞清楚问题所在,在问题不明确的情况下 ,不能贸然着手实现系统 ,否则实现的系统讲没有意义。( 3)本次设计中 ,在编写 、调试、执行的过程中 ,我熟悉了页式存储管理的各个置换算法与分配方法 ,以及回收方法 。 同时,在实现系统的过程中 ,我在需求分析阶段没有搞清楚问题 ,以至于系统功能有误 ,这都是很好的经验和教训 。6 核心代码6.1 内存模块代码class Memory private :doubleallNum=1;doublemissNum = 0;Process
16、* processPtr; / 进程指针数组int * allocateTime;/ 页被分配时的系统时间.学习帮手 .专业整理 .bool * valid;/ 内存页数组 ,标志页是否可用int freeSize;/ 空闲页数量int pageSize = 2;static Memory* instance;Memory();public :static Memory* getInstance();intgetPageNum();void setPageNum( int Num);intgetPageSize();void setPageSize( intSize);Process* get
17、Process(int index) const ; / 获取进程指针intgetTime( int index) const ; / 获取系统时间bool getValid( int index) const ;/ 获取页是否可用int getFreeSizse() const return freeSize; / 获取内存空闲页数量bool validIndex( int index) const ;/index是否有效int getEarliestPage() const ;/ 获取最早进入内存的页void allocate(Process* ptr,int index);/ 分配一个内
18、存页给进程indexvoid allocateAll(Process* pr);/ 为所有进程页分配内存页.学习帮手 .专业整理 .void revoke();/ 释放一页void revoke( int mem);/ 释放一页void revokeProcess(Process* ptr);/ 释放进程的所有页void printInfo() const ;/ 内存页信息;/ 默认构造函数 ,私有Memory:Memory() valid =new bool pageNum;processPtr =new Process*pageNum;allocateTime =new int pageN
19、um;freeSize = pageNum;/ 初始化 : 页标志 、进程指针 、分配时间for ( int i = 0; i pageNum; i+) validi =true ;processPtri = NULL_PTR;allocateTimei = -1;.学习帮手 .专业整理 .int Memory:getPageNum()return pageNum;int Memory:getPageSize()return pageSize;void Memory:setPageNum(int Num)pageNum = Num;void Memory:setPageSize(int Siz
20、e)pageSize = Size;Memory* Memory:instance =new Memory();/ 获取单例Memory* Memory:getInstance() .学习帮手 .专业整理 .return instance;/ 获取进程指针Process* Memory:getProcess(int index) const if (validIndex(index)return processPtrindex;else throw Error( Error: in Memory:getProcess(),错误的下标 ! );/ 获取系统时间int Memory:getTime
21、(int index) const if (validIndex(index)return allocateTimeindex;else throw Error( Error: in Memory:getTime(),错误的下标 !);/ 获取页是否可用bool Memory:getValid(int index) const if (validIndex(index)return validindex;else throw Error( Error: in Memory.getValid(),错误的下标 ! );.学习帮手 .专业整理 ./index是否有效bool Memory:valid
22、Index(int index) const if (index = pageNum)return false;else return true ;/ 获取最早进入内存的页int Memory:getEarliestPage()const int min = MAX_TIME;/ 最小分配时间int pos = -1;/ 最早进入的页for ( int i = 0; i pageNum; i+) if (allocateTimei != -1 & allocateTimei getPage();if (page-getValid(index)throw Error( Error:页已在内存中
23、! );if (freeSize = 0) revoke();/ 释放一页/ 开始分配for ( int i = 0; i allocate(index, i);/ 更新内存信息processPtri = ptr;allocateTimei = time+;validi =false;freeSize-;cout 分配内存页 i 给进程 getName() 第 index 页. endl;break ;.学习帮手 .专业整理 .catch (Error e) cout e.getInfo() endl;6.1 进程模块代码class Process private :string name;/
24、 进程名doublesize;/ 进程大小 ,单位为 MBint pageCount;/ 页数Page* page;/ 进程的页表public :Process(string nm, doublesz);/ 默认构造函数/ 获取进程信息string getName() const return name; doublegetSize() const return size; int getPageCount() const return pageCount; Page* getPage() const return page; .学习帮手 .专业整理 ./ 输出进程信息void printIn
25、fo() const ;/ 默认构造函数Process:Process(string nm , doublesz) /if (sz = pageNum) throw Error(Error:进程大小参数错误 ,构造失败 !);int nameSize =nm .size();if (nameSize MAX_NAME_SIZE)throwError (Error: 进程名长度错误 ,允许的长度为110 ! );name = nm ;size =sz;/ 进程大小doubletemp = size - (int )size;if (temp = 0) pageCount = size;else pageCount = size + 1;/ 新建页表page =new Page(this , pageCount);/ 输出进程信息void Process:printInfo() const .学习帮手 .专业整理 .cout 进程名 : name endl;cout 大小 : size endl;cout 页数 : pageCount endl;#endif6.2 主控模块代码int main() Memory* memory = Memory:getInstance();/ 内存指针Process* process =new Process*MAX_PROCESS_SIZE;/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现代办公事务处理任务十一拟写洽谈接待计划
- 一背肌二胸肌三膈四腹肌五盆部肌第三节躯干
- 土壤三普分析培训
- 《咨询行业研究》课件
- 团队凝聚力培训
- MBA领导力培训课程
- 《女子体育卫生》课件
- 《电工基本知识》课件
- 《光电发射器件》课件
- 妊娠糖尿病护理知识
- 2023年校园调饮师大赛理论考试题库200题(含各题型)
- 中国侦查史知到章节答案智慧树2023年吉林警察学院
- 如何提高急救药品物品器材完好率
- 电子版体温单
- 《蒙特卡罗方法》PPT
- 年产3.0 万吨二甲醚装置分离精馏工段的设计
- 广联达钢结构算量软件-基础培训
- 教学设计 可爱的家乡保定
- 设备维修单模板
- GB/T 30323-2013二手车鉴定评估技术规范
- GA/T 1502-2018法庭科学视频中人像动态特征检验技术规范
评论
0/150
提交评论