ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:179.59KB ,
资源ID:930059      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-930059.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(页面置换算法.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

页面置换算法.docx

1、页面置换算法信息与计算科学09级操作系统实验课程设计报告题 目: 页面置换方法 班 级: 学 号: 姓 名: 时 间: 2011/01/05 【课设题目】:设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问命中率【课设要求】:要求设计主界面以灵活选择某算法,且以下算法都要实现1)先进先出算法(FIFO)2)最近最久未使用算法(LRU)3)最佳置换算法(OPT)【课设目的】:1、用C语言编写OPT、FIFO、LRU三种置换算法。2、熟悉内存分页管理策略。3、了解页面置换的算法。4、掌握一般常用的调度算法。5、根据方案是算法得以模拟实现。【主要思想】:先进先出算法(FIF

2、O)最简单的页面置换算法是先入先出(FIFO)法。这种算法的实质是,总是选择在主存中停留时间最长(即最老)的一页置换,即先进入内存的页,先退出内存。理由是:最早调入内存的页,其不再被使用的可能性比刚调入内存的可能性大。建立一个FIFO队列,收容所有在内存中的页。被置换页面总是在队列头上进行。当一个页面被放入内存时,就把它插在队尾上。这种算法只是在按线性顺序访问地址空间时才是理想的,否则效率不高。因为那些常被访问的页,往往在主存中也停留得最久,结果它们因变“老”而不得不被置换出去。FIFO的另一个缺点是,它有一种异常现象,即在增加存储块的情况下,反而使缺页中断率增加了。当然,导致这种异常现象的页

3、面走向实际上是很少见的。最近最久未使用算法(LRU)FIFO算法和OPT算法之间的主要差别是,FIFO算法利用页面进入内存后的时间长短作为置换依据,而OPT算法的依据是将来使用页面的时间。如果以最近的过去作为不久将来的近似,那么就可以把过去最长一段时间里不曾被使用的页面置换掉。它的实质是,当需要置换一页时,选择在最近一段时间里最久没有使用过的页面予以置换。这种算法就称为最久未使用算法(Least Recently Used,LRU)。LRU算法是与每个页面最后使用的时间有关的。当必须置换一个页面时,LRU算法选择过去一段时间里最久未被使用的页面。LRU算法是经常采用的页面置换算法,并被认为是相

4、当好的,但是存在如何实现它的问题。LRU算法需要实际硬件的支持。其问题是怎么确定最后使用时间的顺序,对此有两种可行的办法: (1)计数器。最简单的情况是使每个页表项对应一个使用时间字段,并给CPU增加一个逻辑时钟或计数器。每次存储访问,该时钟都加1。每当访问一个页面时,时钟寄存器的内容就被复制到相应页表项的使用时间字段中。这样我们就可以始终保留着每个页面最后访问的“时间”。在置换页面时,选择该时间值最小的页面。这样做,不仅要查页表,而且当页表改变时(因CPU调度)要维护这个页表中的时间,还要考虑到时钟值溢出的问题。 (2)栈。用一个栈保留页号。每当访问一个页面时,就把它从栈中取出放在栈顶上。这

5、样一来,栈顶总是放有目前使用最多的页,而栈底放着目前最少使用的页。由于要从栈的中间移走一项,所以要用具有头尾指针的双向链连起来。在最坏的情况下,移走一页并把它放在栈顶上需要改动6个指针。每次修改都要有开销,但需要置换哪个页面却可直接得到,用不着查找,因为尾指针指向栈底,其中有被置换页。因实现LRU算法必须有大量硬件支持,还需要一定的软件开销。所以实际实现的都是一种简单有效的LRU近似算法。一种LRU近似算法是最近未使用算法(Not Recently Used,NUR)。它在存储分块表的每一表项中增加一个引用位,操作系统定期地将它们置为0。当某一页被访问时,由硬件将该位置1。过一段时间后,通过检

6、查这些位可以确定哪些页使用过,哪些页自上次置0后还未使用过。就可把该位是0的页淘汰出去,因为在最近一段时间里它未被访问过。最优置换算法(OPT)最优置换(Optimal Replacement)是在理论上提出的一种算法。其实质是:当调入新的一页而必须预先置换某个老页时,所选择的老页应是将来不再被使用,或者是在最远的将来才被访问。采用这种页面置换算法,保证有最少的缺页率。但是最优页面置换算法的实现是困难的,因为它需要人们预先就知道一个进程整个运行过程中页面走向的全部情况。不过,这个算法可用来衡量(如通过模拟实验分析或理论分析)其他算法的优劣。【设计方案】:根据算法的思想:程序开始时,输入所有的页

7、面号,选择算法,OPT算法用一个一维的数组来实现,LRU与OPT基本一样,前者是向前看的而后者则是向后看的。FIFO则用队列来实现,很显然,先进先出是队列的主要特征。按照所选的算法能得到相应的结果。输出时要有命中率,同时输出发生置换的物理块。可以用switch语句来实现大体框架,分别用三种算法作为函数来调用。【算法流程】:1.FIFO(先进先出)算法2.LRU(最近最久未使用)算法3.OPT(最佳置换)算法【程序体现】:#include #include #define mSIZE 3/物理块号#define N 20/页面个数int pSIZE;static int memerymSIZE=

8、0,0,0;static int processN;void FIFO();/先进先出服务void LRU();/最近最久未使用void get();/打印页面号void OPT();/最佳置换算法int main() int i,code; get(); printf(请输入页面次数:); scanf(%d,&pSIZE); puts(请输入你所需的页面置换数据:); for(i=0;ipSIZE;i+) scanf(%1d,&processi); do puts(*); printf(1.先进先出算法(FIFO)n); printf(2.最近最久未使用算法(LRU)n); printf(3

9、.最佳置换算法(OPT)n); printf(4.退出n); puts(*); printf(请选择置换算法:); scanf(%d,&code); switch(code) case 1: FIFO(); break; case 2: LRU(); break; case 3: OPT(); break; case 4:break; while (code!=4); system(PAUSE); return 0;/打印页面数void get() int i; for(i=0;ipSIZE;i+) printf(%d ,processi); printf(n);/先进先出void FIFO(

10、) int memerymSIZE=0,0,0; int timemSIZE=0,0,0; int i,j,k; int max=0; int count=0; get(); for(i=0;imSIZE;i+) memeryi=processi; timei=i; for(j=0;jmSIZE;j+) if(memeryj != 0) printf(%d ,memeryj); printf(n); /前mSIZE个数直接放入 for(i=mSIZE;ipSIZE;i+) for(j=0,k=0;jmSIZE;j+) if(memeryj!=processi) k+; /判断新页面号是否在物理

11、块中 if(k=mSIZE) /如果都不在物理块中 count+; if(time0time1)/比较三个物理块号中那个页面最先来 max=0; else max=1; if(time2timemax) max=2; memerymax=processi;/把该页面换入最先来的页面号中 timemax=i; for(j=0;jmSIZE;j+) if(memeryj != 0) printf(%d ,memeryj); printf(n); else/物理块中有相等的打印上次的物理块数据 for(j=0;jmSIZE;j+) if(memeryj != 0) printf(%d ,memery

12、j); printf(n); printf(置换次数:%dn,count+3); printf(缺页率 q=%d%n按任意键继续.n,(count+3)*100/pSIZE); getchar(); /最近最久未使用void LRU() int memerymSIZE=0,0,0; int flagmSIZE=0,0,0; int i,j,k; int max=0; int count=0; get(); for(i=0;imSIZE;i+) memeryi=processi; flagi=i; for(j=0;jmSIZE;j+) if(memeryj != 0) printf(%d ,me

13、meryj); printf(n); /前mSIZE个数直接放入 for(i=mSIZE;ipSIZE;i+) for(j=0,k=0;jmSIZE;j+) if(memeryj!=processi) k+; else flagj=i; /判断新页面号是否在物理块中 if(k=mSIZE) /如果都不在物理块中 count+; if(flag0flag1)/比较物理块中三个页面那个最久没有被访问 max=0; else max=1; if(flag2flagmax) max=2; memerymax=processi;/把该页面换入最久没有被使用的页面 flagmax=i; for(j=0;j

14、mSIZE;j+) printf(%d ,memeryj); printf(n); else/如果现在物理块中有相等的就打印上次的物理块 for(j=0;jmSIZE;j+) printf(%d ,memeryj); printf(n); printf(置换次数:%dn,count+3); printf(缺页率 q=%d%n按任意键继续.n,(count+3)*100/pSIZE); getchar();/最佳置换算法void OPT() int memerymSIZE = 0,0,0; int nextmSIZE=0; int i,j,k,l; int count=0,maxnext,max

15、; get(); for(i=0;imSIZE;i+)/打印所有的页面号 memeryi=processi; for(j=0;jmSIZE;j+) if(memeryj != 0) printf(%d ,memeryj); printf(n); /前mSIZE个数直接放入 for(i=mSIZE;ipSIZE;i+) for(j=0,k=0;jmSIZE;j+) if(memeryj!=processi) k+; /判断新页面号是否在物理块中 if(k=mSIZE) /如果都不在物理块中 count+; for(l=i+1;lpSIZE;l+) if(memery0=processl) nex

16、t0=l; goto lin1; next0=l; goto lin1;lin1:for(l=i+1;lpSIZE;l+) if(memery1=processl) next1=l; goto lin2; next1=l; goto lin2;lin2:for(l=i+1;l=next1) max=0; else max=1; if(next2=nextmax) max=2; memerymax=processi; for(j=0;jmSIZE;j+) printf(%d ,memeryj); printf(n); else for(j=0;jmSIZE;j+) printf(%d ,meme

17、ryj); printf(n); printf(置换次数:%dn,count+3); printf(缺页率 q=%d%n按任意键继续.n,(count+3)*100/pSIZE); getchar();【程序测试】:测试例题:课本P150页例题三个物理块页面号引用串:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,11.先进先出算法(FIFO)2.最近最久未被使用(LRU)3.最佳置换方法(OPT)【课设总结】通过此次课设,使我熟练的掌握了页面置换方法,对最佳置换,先进先出算法,最近最久未被使用算法有了更深的了解。而在编写程序中也发现了自己的不足,很多地方靠自己并不能完全写出,还需他人指导,因此再以后的学习当中还要更加的努力。 高洁 091002101

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2