页面淘汰算法课程设计.docx
- 文档编号:12363173
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:20
- 大小:94.27KB
页面淘汰算法课程设计.docx
《页面淘汰算法课程设计.docx》由会员分享,可在线阅读,更多相关《页面淘汰算法课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
页面淘汰算法课程设计
****学院
计算机科学系
课程设计报告
设计名称:
软件课程设计
设计题目:
页面置换算法模拟程序
学生学号:
****
专业班级:
学生姓名:
学生成绩:
指导教师(职称):
课题工作时间:
摘要
操作系统(英语;OperatingSystem,简称OS)是一管理电脑硬件与软件资源的程序,同时也是计算机系统的内核与基石。
操作系统身负诸如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。
操作系统是管理计算机系统的全部硬件资源包括软件资源及数据资源;控制程序运行;改善人机界面;为其它应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,为用户提供方便的、有效的、友善的服务界面。
操作系统是一个庞大的管理控制程序,大致包括5个方面的管理功能:
进程与处理机管理、作业管理、存储管理、设备管理、文件管理。
在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断。
当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。
而用来选择淘汰哪一页的规则叫做页面置换算法(Page-ReplacementAlgorithms)。
A.关键词:
操作系统;OPT页面置换算法;FIFO先进先出的算法;LRR最近最少使用算;LFR最少访问页面算法;NUR最近最不经常使用算法
Abstract
Operatingsystem(inEnglish;OperatingSystem,referredtoasOS)isacomputerhardwareandsoftwareresourcesmanagementprocedures,butalsothecoreandfoundationofthecomputersystem.Whoarechargedwithoperatingsystemssuchasmemorymanagementandallocation,supplyanddemanddeterminethepriorityofsystemresources,controlinputandoutputdevices,operationandmanagementofnetworkfilesystemsandotherbasicservices.Theoperatingsystemismanagingallthehardwareresourcesofcomputersystemsincludingsoftwareresourcesanddataresources;controlprogramisrunning;toimprovehuman-machineinterface;providesupportforotherapplications,sothatcomputersystemsplayaroleinmaximizingallresourcestoprovideuserswithconvenienteffective,friendlyserviceinterface.Operatingsystemisahugemanagementcontrolprocedures,includingthefiveaspectsofgeneralmanagementfunctions:
processandprocessormanagement,operationsmanagement,storagemanagement,devicemanagement,documentmanagement.
Intheaddressmappingprocess,iffoundtobeinthepagetoaccessthepagenolongerinmemory,thengenerateapagefault.Whenapagefaultoccurstheoperatingsystemmustselectapageinmemoryoftheiroutofmemoryinordertobetransferredtothepagetomakeroom.Thepageusedtoselectoutwhattherulesarecalledpagereplacementalgorithm(Page-ReplacementAlgorithms).
Keywords:
Operatingsystem;FirstInputFirstOutput;LeastRecentlyUsed;OPT;LeastFrequentlyUsed;NUR
目录
第一章课题背景…………………………………………………………………………..x
1.1关于页面置换算法……………………………………………………………………...x
第二章设计简介及设计方案论述………………………………………………………..x
2.1程序运行平台……………………………………..………………………….………..x
2.2程序的主要功能………………….………………..………………………….…x
2.3XXXX……………………………………………………..………………………….…x
第三章详细设计…………………………………………………………..………………..x
3.1XXXX……………………………………………………..………………………….…x
3.1XXXX……………………………………………………..………………………….…x
第四章设计结果及分析…………………………………………………..………………..x
4.1XXXX…………………………………………….………………………………..….…x
4.2XXXX….…………………………………………………..………………………….…x
4.3XXXX…….………………………………………………..………………………….…x
总结…….……………………………………………………..………………………….…x
致谢…….……………………………………………………..………………………….…x
参考文献…….………………..………………………………..………………………….…x
附录主要程序代码………...………………………………..………………………….…x
第一章课题背景
1.1关于页面置换算法
1.1.1页面置换算法及其分类
在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断。
当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。
而用来选择淘汰哪一页的规则叫做页面置换算法。
常见的置换算法有:
1.最佳置换算法(OPT)(理想置换算法)
2.先进现出置换算法(FIFO):
3.最近最久未使用(LRU)算法
4.Clock置换算法(LRU算法的近似实现)
5.最少使用(LFU)置换算法
6.页面缓冲置换算法
1.1.2关于页面置换算法模拟程序问题的产生
在各种存储器管理方式中,有一个共同的特点,即它们都要求将一个作业全部装入内存方能运行,但是有两种情况:
(1)有的作业很大,不能全部装入内存,致使作业无法运行;
(2)有大量作业要求运行,但内存容量不足以容纳所有这些作业。
而虚拟内存技术正式从逻辑上扩充内存容量,将会解决以上两个问题。
从内存中调出一页程序或数据送磁盘的对换区中,通常,把选择换出的页面的算法称为页面置换算法(Page-ReplacementAlgorithms)。
进而页面置换算法模拟程序能客观的将其工作原理展现在我们面前。
第二章设计简介及设计方案论述
2.1程序运行平台
VC++6.0
具体操作如下:
在VC++6.0的环境下准备用时钟函数调用库函数(#include
编写三种算法。
2.2程序的主要功能
2.2.1随机产生页面
用随机数方法产生页面走向,页面走向长度为L。
2.2.2FIFO算法
该算法总是淘汰最先进入内存的页面,既选择在内存中驻留时间最久的页面予以淘汰。
2.2.3LRU算法
在前面几条指令中使用频繁的页面很可能在后面的几条指令中频繁使用。
反过来说,已经很久没有使用的页面很有可能在未来较长的一段时间内不会被用到。
这个思想提示了一个可以实现的算法:
在缺页发生时,淘汰掉最久未使用的页。
2.2.4LFR算法
在缺页中断发生时,置换未使用时间最长的页面。
这个策略称为LRU(LeastRecentlyUsed,最近最少使用)页面置换算法
2.2.5NUR算法
NRU在需要淘汰某一页时,从那些最近一个时期内未被访问的页中任选一页淘汰。
只要在页表中增设一个访问位即可实现。
当某页被访问时,访问位置1。
否则,访问位置0。
系统周期性地对所有引用位清零。
当需淘汰一页时,从那些访问位为零的页中选一页进行淘汰。
如果引用位全0或全1,NRU算法退化为FIFO算法。
2.3总体设计
2.31结构图
输出命
中率
4.2主要的函数
Input(intm,Prop[L])(打印页面走向状态);
voidprint(Pro*page1)(打印当前的页面);
intSearch(inte,Pro*page1)(寻找内存块中与e相同的块号);
intMax(Pro*page1)(寻找最近最长未使用的页面);
intCount(Pro*page1,inti,intt,Prop[L])(记录当前内存块中页面离下次使用间隔长度);
intmain()(主函数);
.随机数发生器
#include
#include
t=time(NULL);//取时钟时间并存入t调用库函数
srand(t);//用时间t初始化随机数发生器调用库函数
x=rand()%10+1;//返回一个1~10之间的随机数
第三章详细设计
4.1FIFO(先进先出)
设计原理:
需要进行页面置换,即把内存中装入最早的那个页面淘汰,换入当前的页面。
算法流程图
开始
页面走向存入数组p[]中,内存块用page[]表示初始化为0
当前p[]中第i个元素是否已在内存中
i++
Y
Page[]是否有空
N
N
把p[i]的内容直接装入最上面一个空内存块,i++
把page[]中最先装入的页面置换出去.i++
Y
输出当前内存块状态
结束
图4-1FIFO算法流程图
代码:
if(c==1)//FIFO页面置换
{
n=0;
cout<<"******************************************"< cout< cout<<"FIFO算法页面置换情况如下: "< cout< cout<<"******************************************"< while(i { if(Search(p[i].num,page)>=0)//当前页面在内存中 {cout< cout<<"不缺页"< i++;//i加1 } else//当前页不在内存中 { if(t==M)t=0; else { n++;//缺页次数加1 page[t].num=p[i].num;//把当前页面放入内存中 cout< print(page);//打印当前页面 t++;//下一个内存块 i++;//指向下一个页面 } } } cout<<"缺页次数: "< "< } 4.2LRU(最近最久未使用) 设计原理: 当需要淘汰某一页时,选择离当前时间最近的一段时间内最久没有使用过的页先淘汰该算法的主要出发点是,如果某页被访问了,则它可能马上还要被访问。 或者反过来说如果某页很长时间未被访问,则它在最近一段时间也不会被访问。 开始 算法流程图: 页面走向存入数组p[]中,内存块用page[]表示初始化为0 当前p[]中第i个元素是否已在内存 i++ Y N Page[]是否有空 YN 把p[i]的内容直接装入最上面一个空内存块,i++ 把page[]中最近最久未使用的页面置换出去.i++ 输出当前内存块状态 结束 图4-2LRU算法流程图 代码: if(c==2)//LRU页面置换 { n=0; cout<<"******************************************"< cout< cout<<"LRU算法页面置换情况如下: "< cout< cout<<"******************************************"< while(i { inta; t=Search(p[i].num,page); if(t>=0)//如果已在内存块中 { page[t].time=0;//把与它相同的内存块的时间置0 for(a=0;a if(a! =t)page[a].time++;//其它的时间加1 cout< cout<<"不缺页"< } else//如果不在内存块中 { n++;//缺页次数加1 t=Max(page);//返回最近最久未使用的块号赋值给t page[t].num=p[i].num;//进行替换 page[t].time=0;//替换后时间置为0 cout< print(page); for(a=0;a if(a! =t)page[a].time++;//其它的时间加1 } i++; } cout<<"缺页次数: "< "< } 4.3OPT(最佳置换算法) 设计原理: 需要进行页面置换,把内存中以后一段时间都不使用或是使用时间离现在最远的页面换出。 流程图: 开始 页面走向存入数组p[]中,内存块用page[]表示初始化为0 当前p[]中第i个元素是否已在内存 i++ Y Page[]是否有空 N YN 把p[i]的内容直接装入最上面一个空内存块,i++ 把page[]中以后一段时间都不使用或是使用时间离现在最远的换出.i++ 输出当前内存块状态 结束 图4-3OPT流程图 代码: if(c==3)//OPT页面置换 { n=0; cout<<"******************************************"< cout< cout<<"OPT算法置换情况如下: "< cout< cout<<"******************************************"< while(i { if(Search(p[i].num,page)>=0)//如果已在内存块中 { cout< cout<<"不缺页"< i++; } else//如果不在内存块中 { inta=0; for(t=0;t if(page[t].num==0)a++;//记录空的内存块数 if(a! =0)//有空内存块 { intq=M; for(t=0;t if(page[t].num==0&&q>t)q=t;//把空内存块中块号最小的找出来 page[q].num=p[i].num; n++; cout< print(page); i++; } else { inttemp=0,s; for(t=0;t if(temp { temp=Count(page,i,t,p); s=t; }//把找到的块号赋给s page[s].num=p[i].num; n++; cout< print(page); i++; } } } cout<<"缺页次数: "< "< } 第四章设计结果及分析 4.1实现结果 程序在运行的情况下,进入主界面输入菜单,如图3-3所示: 输入14: 图4-5输入14后的输出图 输入25: 图5-6输入数据25后输出图 输入数据18: 图5-7输入数据18后的输出图 输入数据: 图5-8输出图 选1,进入FIFO页面置换: 图5-9FIFO的输出图 选2,进入LRU页面置换: 图5-10LRU的输出图 输入3,进入OPT页面置换: 图5-11OPT的输出图 总结 通过对页面置换算法模拟程序的程序设计,让我对虚拟页式存储管理有了更深的了解。 刚开始拿到这个题目觉得很难,不知道该怎么下手,因为是自己第一次用C语言编写操作系统程序。 但是搞懂了页面置换的思想以后,对编程就有了一定的思路。 经过几天的编写,程序也终于写出来啊。 但是却遇到了许多困难,程序的调试也出现了许多的错误。 但是经过几次上机操作,在老师的指导和帮助下,程序最终还是完成了。 通过这次的程序设计,让我对C语言有了更深一步的了解和认识,编程能力也有了提高,我认到学好计算机要重视实践操作,只有真正动手了才知道自己还有那些不足之处。 致谢 本次课程设计能顺利完成,感谢学校的大力支持,感谢计算机科学系为我们提供实练的机会,感谢老师的细心教导。 在这次课程设计中,我学到了很多东西,对C语言编写操作系统有了一定的认识,自己的编程能力也有了提高。 虽然在课程设计中我遇到了很多的困难,但是也得到了很多人的帮助,在他们的帮助下,我才能顺利完成自己的课程设计。 我要感谢我的老师和同学们,感谢他们的帮助,在我迷茫的时候给了我许多好的建议,有了他们的帮助,我的程序才能顺利的完成。 参考文献 参考文献采用顺序编码制格式著录。 主要责任者,三名以内的,全部列出;超过三名时,后面加“等.”字样。 参考文献类型及标识: 参考文献类型 专著 论文集 报纸文章 期刊文章 学位论文 报告 标准 专利 文献类型标识 M C N J D R S P 其他未作说明的文献,建议采用单字母“Z”。 参考文献编排格式(注意严格使用格式中的符号,特别注意区分“,”与“.”): (1)对于专著、论文集、学位论文、报告,格式如下: [序号]主要责任者.文献题名[X].出版地: 出版者,出版年.起止页码. 其中X代表文献类型标识。 (2)对于期刊文章,格式如下: [序号]主要责任者.文献题名[J].刊名,年,卷(期): 起止页码. (3)对于报纸文章,格式如下: [序号]主要责任者.文献题名[N].报纸名,出版日期(版次). (4)对于国际、国家标准,格式如下: [序号]标准编号,标准名称[S]. (5)对于专利,格式如下: [序号]专利所有者.专利题名[P].专利国别: 专利号,出版日期. (6)对于未定义类型的文献 [序号]主要责任者.文献题名[Z].出版地: 出版者,出版年. 课程设计资料的组成 资料组成及装订按如下标准: 封面→课程设计任务书→课程设计进度表→指导教师评语→答辩记录表→成绩评定表→摘要→目录→正文→结束语→谢辞→参考文献。 注意: 页码从第一章开始编且居中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 页面 淘汰 算法 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)