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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(设计一个虚拟存储区和内存工作区编程序演示下述算法的具体实现过程并计算访问命中率.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

设计一个虚拟存储区和内存工作区编程序演示下述算法的具体实现过程并计算访问命中率.docx

1、设计一个虚拟存储区和内存工作区编程序演示下述算法的具体实现过程并计算访问命中率齐齐哈尔大学 操作系统课程综合实践题目: 主界面以灵活选择某算法班级:计本 093赵明秋学号:2009021114指导教师: 韩金库2008 年 12 月主界面以灵活选择某算法实验摘要:计算机应用专业的学生全面了解和掌握系统软件 ,一般软件设计方法和技术的必不可少的综合课程 ,也是了解计算机硬件和软件如何衔接的必经之路。我觉得此次实验最大的亮点以及不同于别人的地方就是将三种页面置换算法按照课 本上老师讲的方式直观简便的输出 ,在采用输出算法时,我摒弃了常人所用的一维数组输 出法, 而别出心裁的采用了二维数组的输出算法

2、, 模拟了内存的物理块, 清晰直观的表达了 页面是如何在外存中被调入内存中的, 以及各页面在调入过程中是否命中或在置换时又置换 了内存中哪个页面。 在软件工程的角度来看, 我的系统具有高内聚低耦合的优点, 即各种算 法之间,并不影响彼此的函数调用,而在各算法的内部,内聚度很高。关键词 :设计原理 , 设计方案 , 流程图 ,源代码,测试结果,结束语,参考文献课题运行环境操作系统: Windows XP编程环境: Microsoft Visual C+6.01.1实验内容 :通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储 技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置

3、换算法的基本思 想和实现过程, 并比较它们的效率。 熟悉虚拟存储管理的各种液面置换算法, 并 辨析恶魔你程序实现请求页式存储管理的页面置换算法。设计一个虚拟存储区和内存工作区 ,编程序演示下述算法的具体实现过程 , 并计算访问命中率。设计要求:主界面以灵活选择某算法,且以下算法都要实现1、先进先出算法( FIFO) 2、最近最久未使用算法( LRU)3、最佳置换算法( OPT)2.1运行环境1)操作系统: Windows XP2)编程环境: Microsoft Visual C+6.03.1设计原理 :3.1.1先进先出算法( FIFO)最简单的页面置换算法是先入先出( FIFO)法。这种算法

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

5、的。该算法将所有使用的内存页面构成一个循环列队, 每次置换时将队列中的队 首唤出,队首指针后移一位即可, 算法容易实现牡丹石最先进入内存的野末必将 来就不用再到, 甚至可能很快就会用到, 所以不能保证有效的缺页率, 算法性能3.2.2最近最久未使用算法( LRU)FIFO算法和 OPT 算法之间的主要差别是, FIFO算法利用页面进入内存后的 时间长短作为置换依据,而 OPT 算法的依据是将来使用页面的时间。如果以最 近的过去作为不久将来的近似, 那么就可以把过去最长一段时间里不曾被使用的 页面置换掉。 它的实质是, 当需要置换一页时, 选择在最近一段时间里最久没有 使用过的页面予以置换。 这

6、种算法就称为最久未使用算法 ( Least Recently Used, LRU)。LRU算法是与每个页面最后使用的时间有关的。 当必须置换一个页面时, LRU 算法选择过去一段时间里最久未被使用的页面。LRU 算法是经常采用的页面置换算法, 并被认为是相当好的, 但是存在如何实现 它的问题。 LRU算法需要实际硬件的支持。 其问题是怎么确定最后使用时间的顺 序,对此有两种可行的办法:(1)计数器。最简单的情况是使每个页表项对应一个使用时间字段,并给 CPU 增加一个逻辑时钟或计数器。每次存储访问,该时钟都加 1。每当访问一个 页面时,时钟寄存器的内容就被复制到相应页表项的使用时间字段中。 这

7、样我们 就可以始终保留着每个页面最后访问的 “时间”。在置换页面时, 选择该时间值 最小的页面。这样做,不仅要查页表,而且当页表改变时(因 CPU 调度)要维 护这个页表中的时间,还要考虑到时钟值溢出的问题。(2)栈。用一个栈保留页号。每当访问一个页面时,就把它从栈中取出放在 栈顶上。这样一来, 栈顶总是放有目前使用最多的页, 而栈底放着目前最少使用 的页。由于要从栈的中间移走一项, 所以要用具有头尾指针的双向链连起来。 在 最坏的情况下,移走一页并把它放在栈顶上需要改动 6个指针。每次修改都要有 开销,但需要置换哪个页面却可直接得到,用不着查找,因为尾指针指向栈底, 其中有被置换页。因实现

8、LRU 算法必须有大量硬件支持,还需要一定的软件开销。所以实际实现 的都是一种简单有效的 LRU近似算法。一种 LRU近似算法是最近未使用算法( Not Recently Used , NUR)。它在存储分 块表的每一表项中增加一个引用位,操作系统定期地将它们置为 0。当某一页被访问时,由硬件将该位置 1。过一段时间后,通过检查这些位可以确定哪些页使 用过,哪些页自上次置 0后还未使用过。 就可把该位是 0的页淘汰出去, 因为在最 近一段时间里它未被访问过。3.3.3最佳置换算法( OPT)最优置换( Optimal Replacement )是在理论上提出的一种算法。其实质是: 当调入新的一

9、页而必须预先置换某个老页时,所选择的老页应是将来不再被使 用,或者是在最远的将来才被访问。 采用这种页面置换算法, 保证有最少的缺页 率。但是最优页面置换算法的实现是困难的, 因为它需要人们预先就知道一个进 程整个运行过程中页面走向的全部情况。 不过,这个算法可用来衡量 (如通过模 拟实验分析或理论分析)其他算法的优劣。该算法能保证有最低的缺页率, 所以称为最佳置换算法, 但是该算法紧紧是 一种理想状况下的算法, 因为在进程实际运行过程中, 将来会执行到那儿页是不 可预知的,所以无法选择该置换那个页出去。因此,本算法在实际中无法使用, 只能作为一种标准来衡量其他算法的性能4.1设计方案1)主界

10、面:设置页面产生算法选择界面和页面置换算法选择界面;2)子界面: 页面产生算法分为两个界面,分别是随机产生算法和自己输入产生算法。页面置换算法分为三个子界面, 分别是先进先出算法界面、 最近最久未使用 算法界面、最佳置换算法界面。5.1流程图5.1.1主流程图t= =1图(1)5.1.2FIFO 函数流程图:findExist(i)findSpace()图(2)startvoid InitL()val=Eq(folduation,b);val=0Tbval.time=0;Getmax()endlfor(i=0;iBsize ;i+) if (i!=val) bi.time+;图(4)5.1.4

11、OPT 函数流程图:图(5)6.源代码6.1程序代码 #include #include #include #define Bsize 3 #define Psize 12using namespace std; int QStringPsize; int Num=0;struct pageInforint content;int timer;class YZ_replacepublic:YZ_replace(); YZ_replace(); int findSpace(); int findExist(int curpage); int findReplace(); void FIFO();

12、 void OPT();void BlockClear();void initia1(int string); pageInfor *block;int memory_stateBsizePsize;int s;private:;void P_String(int QString)int i;srand(unsigned)time(NULL);for(i=0;iPsize;i+)QStringi=rand()*9/RAND_MAX+1;cout 页面走向: ;for(i=0;iPsize;i+)coutQStringi ;coutendl;YZ_replace:YZ_replace()s=0;

13、block = new pageInforBsize;for(int i=0; iBsize; i+)blocki.content = -1;blocki.timer = 0;void YZ_replace:initia1(int QString )int j;page = new pageInforPsize;for(int i=0; iPsize; i+)pagei.content = QStringi;pagei.timer = 0;for(i=0;iPsize;i+)for(j=0;jBsize;j+)memory_stateji=0;YZ_replace:YZ_replace()s=

14、0;int YZ_replace:findSpace()for(int i=0; iBsize; i+)if(blocki.content = -1)return i;return -1;int YZ_replace:findExist(int curpage)for(int i=0; iBsize; i+)if(blocki.content = pagecurpage.content)return i;return -1;int YZ_replace:findReplace()int pos = 0;for(int i=0; i= blockpos.timer)pos = i;return

15、pos;void YZ_replace:FIFO()int exist,space,position ;for(int i=0; iPsize; i+)exist = findExist(i);if(exist != -1)for(int b=0; bBsize; b+)memory_statebi=memory_statebi-1;s+;elsespace = findSpace();if(space != -1)for(int b=0; bBsize; b+)memory_statebi=memory_statebi-1;blockspace = pagei;memory_statespa

16、cei=blockspace.content;elsefor(int b=0; bBsize; b+)memory_statebi=memory_statebi-1;position = findReplace();blockposition = pagei;memory_statepositioni=blockposition.content; for(int j=0; jBsize; j+)blockj.timer+;void YZ_replace:BlockClear()for(int i=0; iBsize; i+)blocki.content = -1;blocki.timer =

17、0;typedef struct pageint num;int time;Page;Page bBsize;Page callBsize; int cBsizePsize;int K;void InitL(Page *b,int cBsizePsize)int i,j;for(i=0;iBsize;i+)bi.num=-1;bi.time=Psize-i-1;for(i=0;iBsize;i+)for(j=0;jPsize;j+)cij=-1;int GetMax(Page *b)int i;int max=-1;int tag=0;for(i=0;imax)max=bi.time;tag=

18、i;return tag;int Equation(int fold,Page *b)int i;for(i=0;i=0)bval.time=0;for(i=0;iBsize;i+)if (i!=val)bi.time+;elsequeue+K=fold;val=GetMax(b);bval.num=fold;bval.time=0;for(i=0;iBsize;i+)if (i!=val)bi.time+;void YZ_replace:OPT()for(int i=0; iPsize; i+)exist = findExist(i);if(exist != -1)for(int b=0;

19、bBsize; b+)memory_statebi=memory_statebi-1;s+;elsespace = findSpace();if(space != -1)for(int b=0; bBsize; b+)memory_statebi=memory_statebi-1;blockspace = pagei;memory_statespacei=blockspace.content;elsefor(int k=0; kBsize; k+)memory_stateki=memory_stateki-1;for(int j=i; jPsize; j+)if(blockk.content

20、!= pagej.content) blockk.timer = 1000; else blockk.timer = j; break;position = findReplace();blockposition = pagei;memory_statepositioni=blockposition.content;int decide(string str)for(int i=0;istr.size();i+)if(stri9)return 0;break;return i;int trans(string str)int sum=0;for(int i=0;istr;a=decide(st

21、r);while(a=0)cout 输入错误 ,请重新输入! str;a=decide(str);d=trans(str);return d;void Put()cout 请选择产生页面的方法 a:随机产生 b:输入产生 endl;coutF;while(F!=a&F!=b)coutF;if(F=a)P_String(QString) ;if(F=b)cout 请输入各页面号 :endl;for(int i=0;iPsize;i+)QStringi=put();coutendl;cout| -|endl;void main()cout| 页 面 置 换 |endl;cout| -|endl;i

22、nt t=1;while(t)Put();YZ_replace test1;YZ_replace test3;char select;doOPTcout 请选择要应用的算法 :FIFO 算法 LRU 算法 算法 退出 endl;int p,q;coutselect;while(select!=0&select!=1&select!=2&select!=3)cout 您的输入无效 ,请重新输入 :select;if(select=0)coutcoutcout 完成退出 .endl;t=0;if(select=1)cout 您选择的是菜单 endl;coutFIFO 算法状态 :endl;test

23、1.initia1(QString);test1.FIFO();test1.BlockClear(); endl;for(p=0;pBsize;p+)for(q=0;qPsize;q+)couttest1.memory_statepq coutendl;endl;test1.YZ_replace();coutendl;if(select=2)int i,j;K=-1;InitL(b, c);for(i=0;iPsize;i+)Lru(QStringi,b);c0i=QStringi;for(j=0;jBsize;j+)cji=bj.num;cout 您选择的是菜单 endl;coutLRU 算

24、法状态 :endl;cout endl;for(i=0;iBsize;i+)for(j=0;jPsize;j+)if(cij=-1)cout 0;elsecout cij;cout endl;cout endl;cout 命中率 :(Psize-(K+1)/Psize; coutt;coutendl;if(select=3)cout 您选择的是菜单 endl;coutOPT 算法状态 :endl;test3.initia1(QString);test3.OPT();test3.BlockClear();for(p=0;pBsize;p+)for(q=0;qPsize;q+)couttest3.

25、memory_statepq coutendl;cout endl;cout 命中率 :test3.s/Psizeendl;test3.YZ_replace();coutendl;while(select=1|select=2|select=3);7.测试结果7.1页面选择测试:图(7.1)图(7.2)分析:页面产生的方法有两种选择, 分别是随机产生和自己输入产生, 选择 菜单的时候有对异常输入的处理, 如果输入错误, 有错误提示, 当输入正确菜单 的时候,选择 a,自动产生页面走向,如果选择 b ,自己可以任意输入,如果输 入错误,有错误提示。6.2应用算法选择测试图( 7.3)分析:选择算

26、法时,有异常处理,即如果输入错误,有错误提示。如果选择 菜单 1,即选择了 FIFO 算法,展示此算法的置换状态并显示命中率。置换状态 以二维数组的形式输出,既直观又清晰。图(7.4)分析:算法一进行完以后, 界面自动跳到应用算法的选择界面, 即可以再次 选择置换算法, 选择菜单 2,即选择了 LRU算法, 展示此算法的置换状态并显示 命中率,可以和第一个算法进行对比,找出两种算法的不同。图( 7.5)分析:算法二进行完以后, 界面自动跳到应用算法的选择界面, 即可以再次 选择置换算法, 选择菜单 3,即选择了 OPT算法,展示此算法的置换状态并显示 命中率,可以和第二个算法进行对比,找出两种算法的不同。图(7.6)分析:算法二进行完以后,界面自动跳到应用算法的选择界面,即可以再 次选择置换算法, 选择菜单 3,即选择了 OPT 算法,展示此算法

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1