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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

OS页面置换算法模拟实现.docx

1、OS页面置换算法模拟实现实验报告实验2 页面置换算法实现一、实验目的 通过页面置换算法的程序实现,加深理解。二、设计内容(1)概述在进程运行过程中,若其所要访问的页面不在内存所需把他们调入内存,但内存已无空闲时,为了保证进程能够正常运行,系统必须从内存中调入一页程序或数据送磁盘的对换区中。但应将那个页面调出,须根据一定的算法来确定。通常,把选择换出页面的算法称为页面置换算法。置换算法的好坏,将直接影响到系统的性能。一个好的页面置换算法,应具有较低的页面更换频率。从理论上将讲,应将那些以后不再访问的页面换出,或把那些较长时间内不再访问的页面调出。目前存在着不同的算法,他们都试图更接近与理论上的目

2、标。拥有页面交换机制的操作系统总是把当前进程中急需处理的部分页面换入到内存当中,而把更多暂时不需要处理的页面放置在外存当中。由于进程需要处理的页面顺序不同,因此必须要在内存与外存之间进行页面交换,页面置换算法也就应运而生。(2)设计原理1.先进先出(FIFO)算法这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存停留时间最久的给予淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替代指针,使它总是指向最老的页面。但该算法与进程实际运行的规律不相适应,因为在incheng中,有些页面经常被访问,比如,含有全局变量,常用函数,例

3、程等方面,FIFO算法并不能保证这些页面不被淘汰。当需要选择一个页面淘汰时,总是选择最先进入内存空间的那一个页面。只要在系统中建立一个FIFO队列,以反映页面的活动情况。被选择的页面总是处于队首的页面,而最近调入的页面永远存放在队列的尾部。2.最近最久未使用(LRU)算法FIFO置换算法的性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后不能反映页面的使用情况。最近最久未使用(LRU)的页面置换算法,是根据页面调入内存后的使用情况进行决策的。由于无法预测各个页面将来的使用情况,只能利用“最近的过去”,作为“最近的将来”的近似。该算法的基本思想是用最近的过去估计最近的

4、将来。假定在内存中的某个页面,在最近一段时间内未被使用的时间最长,那么在最近的将来也可能不再被使用。3.理想页面置换(OPT)算法最佳置换算法由Belady于1966年提出,这是一种理想情况下的页面置换算法,但实际上不可能实现。但人们目前把还无法预知一个进程在内的若干页面中,哪一个页面是未来最长时间内不再被访问,因而该算法无法实现。基本思想是内存中每个页都用该页面首次被访问前所要执行的指令数进行标记,标记最大的页应该被置换三、详细设计及编码1.模块设计1 进入系统模块。进入登陆界面,输入内存页面数和实际页数2 页面号打印模块。打印输入的页面号。3 菜单选择模块。选择相应的页面的置换方式,选择相

5、应的字母,进入相应的功能。4 算法模块。选择相应的页面置换算法。5 显现输出模块。显示页面被置换的情况。5.缺页次数和缺页率模块。计算页面号输入的计算结果。6.退出系统模块。退出置换页面。2.系统详细设计1系统主界面设计(包含登陆模块设计) 首先贯穿全局的全局需要一系列的函数来实现本操作系统的各种功能。需要函数自带的文件stdafx.h 和iostream.h 首先输入的页数自定义最大值为40程序用#define M 40实现。为了防止输入的页数太多,超出自定义40个数的范围,通过输入函数实现:int Input(int m,Pro pM) /输入函数。2.系统模块。首先通过打印当前的页面 v

6、oid print(Pro *page1) /打印当前的页面 Pro *page=new ProN; page=page1; for(int i=0;iN;i+)coutpagei.num ; coutendl; 查找内存中是否存在要调入的页面int Search(int e,Pro *page1 ) Pro *page=new ProN; page=page1; for(int i=0;iN;i+)if(e=pagei.num)return i; return -1;找出离现在时间最长的页面int Max(Pro *page1) Pro *page=new ProN; page=page1;

7、 int e=page0.time,i=0; while(iN) if(epagei.time)e=pagei.time; i+; for( i=0;iN;i+)if(e=pagei.time)return i; return -1;找到最久不使用的页面int Compfu(Pro *page1,int i,int t,Pro pM) Pro *page=new ProN; page=page1; int count=0; for(int j=i;jM;j+) if(paget.num=pj.num )break; else count+; return count;3. FIFO页面置换和缺

8、页次数及缺页率模块实现如下:if(c=1)/FIFO页面置换 n=1; cout页面置换情况: endl; while(i=0)i+;/找到相同的页面 else if(t=N)t=0; else n+; paget.num=pi.num; print(page); t+; cout缺页次数:n 缺页率:n/mendl; 4LRU页面置换和缺页次数及缺页率模块实现如下:if(c=2)/LRU页面置换 n=1; cout页面置换情况: endl; while(i=0) paget.time=0; else n+; t=Max(page); paget.num=pi.num; paget.time=

9、0; if(t=0)paget+1.time+;paget+2.time+; if(t=1)page2.time+;page0.time+; if(t=2)page1.time+;page0.time+; if(k=-1) print(page); i+; cout缺页次数:n 缺页率:n/mendl; 5OPT页面置换和缺页次数及缺页率模块实现如下(本代码在页面置换中:if(c=3)/OPT页面置换 n=1; while(i=0)i+; else int temp=0,cn; for(t=0;tN;t+) if(tempCompfu(page,i,t,p) temp=Compfu(page,

10、i,t,p); cn=t; pagecn=pi; n+; print(page); i+; cout缺页次数:n 缺页率:n/mendl; 四、结果及分析 1.测试方案 1. 测试方案(一) 输入可用页面为3,实际页数是20,各个页面号7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1选择实验要求FIFO页面置换,然后选择LRU算法。最后选择OPT(对比)。2. 测试方案(二)输入可用页面为3,实际页数是20,各个页面号1 0 7 1 0 2 1 2 2 3 0 3 4 0 3 0 2 1 0 7选择实验要求FIFO页面置换,然后选择LRU算法。最后选择OPT(对比

11、1)3.测试方案(三) 输入可用页面为4,实际页数是20,各个页面号7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1(课本例题)选择实验要求FIFO页面置换,然后选择LRU算法。最后选择OPT(对比)2.测试结果 1. 测试方案(一)结果。输入可用页面为3,实际页数是20,各个页面号7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 测试成功。见图(图4-1输入页面登陆与输入)选择FIFO页面置换时显示页面置换情况、缺页次数和缺页率(见图4-2 FIFO页面置换界面)。图4-1输入页面登陆与输入图4-2 FIFO页面置换界面选择LRU页

12、面置换时显示页面置换情况、缺页次数和缺页率(见图4-3 LRU页面置换界面) 图4-3 LRU页面置换界面选择OPT页面置换时(对比)显示页面置换情况、缺页次数和缺页率(见图4-4OPT页面置换界面)图4-4 3OPT页面置换界面2. 测试方案(二)结果。输入可用页面为3,实际页数是20,各个页面号1 0 7 1 0 2 1 2 2 3 0 3 4 0 3 0 2 1 0 7 测试成功。见图(图4-5输入页面登陆与输入)选择FIFO页面置换时显示页面置换情况、缺页次数和缺页率(见图4-5 FIFO页面置换界面) 图4-5输入页面登陆与输入选择LRU页面置换时显示页面置换情况、缺页次数和缺页率(

13、见图4-6 LRU页面置换界面)选择OPT页面置换时(对比)显示页面置换情况、缺页次数和缺页率(见图4-7OPT页面置换界面)图4-6 LRU页面置换界面 图4-7OPT页面置换界面3. 测试方案(三)结果。输入可用页面为3,实际页数是20,各个页面号7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 测试成功。见图(图4-1输入页面登陆与输入)选择FIFO页面置换时显示页面置换情况、缺页次数和缺页率(见图4-8 FIFO页面置换界面)图4-8 FIFO页面置换界面选择LRU页面置换时显示页面置换情况、缺页次数和缺页率(见图4-9LRU页面置换界面)选择OPT页面置

14、换时(对比)显示页面置换情况、缺页次数和缺页率(见图4-10OPT页面置换界面) 图4-9LRU页面置换界面 图4-9LRU页面置换界面3.测试结果分析从上述结果可知,在内存页面为3个页面时, 由于用户进程的所有指令基本上都没装入内存,只装入一小部分,从而算法之间的差别比较大。三种算法的访内命中率大致在45至75之间变化。但是,FIFO算法与OPT算法之间的差别一般在25个百分点左右。 比较上述三种算法,以OPT算法的命中率最高, LRU算法次之,其次是FIFO算法。五、设计小结原以为本题看起来很简单,也就不过是一个随机数函数和三种算法实现而已,但是事实证明我彻彻底底的错了。 首先是随机数生成

15、,来回看了好几遍都没弄懂生成方法,最后经同学指点一下才终于明白,由于个人水平有限,光是理解原理及理清程序结构就已经花费了很多宝贵的时间。 本次实验中体会最深刻的就是运用了构件化的方法来测试模块,否则面对如此可观的代码量,如果每次都是编写完一点功能或者编写完所有功能才进行测试,debug的话都不知道从哪儿找起了,特别对于编程水平不高的自己来说,这样做无疑是自掘坟墓,程序完成之日将遥遥无期。六、实验代码#include#define M 40int N;struct Pro/结构体int num,time;int Input(int m,Pro pM)/输入函数coutm;if(mM)cout数目

16、太多,请重试endl;else break;while(1);coutendl请输入各页面号endl;for(int i=0;ipi.num;pi.time=0;return m;void print(Pro *page1)/打印当前的页面Pro *page=new ProN;page=page1;for(int i=0;iN;i+)coutpagei.num ;coutendl;int Search(int e,Pro *page1 )/查找内存中是否存在要调入的页面Pro *page=new ProN;page=page1;for(int i=0;iN;i+)if(e=pagei.num)

17、return i;return -1;int Max(Pro *page1)/找出离现在时间最长的页面Pro *page=new ProN;page=page1;int e=page0.time,i=0;while(iN)if(epagei.time)e=pagei.time;i+;for( i=0;iN;i+)if(e=pagei.time)return i;return -1;int Compfu(Pro *page1,int i,int t,Pro pM)/找到最久不使用的页面Pro *page=new ProN;page=page1;int count=0;for(int j=i;jM

18、;j+)if(paget.num=pj.num )break;else count+;return count;int main()cout可用内存页面数N;Pro pM;Pro *page=new ProN;char c;int m=0,t=0;float n=0;m=Input(m,p);dofor(int i=0;iN;i+)/初试化页面基本情况pagei.num=0;pagei.time=2-i;i=0;coutf:FIFO页面置换endl;coutl:LRU页面置换endl;couto:OPT页面置换endl;cout按其它键结束c;if(c=f)/FIFO页面置换n=1;cout页

19、面置换情况: endl;while(i=0)i+;/找到相同的页面elseif(t=N)t=0;elsen+;/paget.num=pi.num;print(page);t+;cout缺页次数:n 缺页率:n/mendl;if(c=l)/LRU页面置换 n=1;cout页面置换情况: endl;while(i=0)paget.time=0;elsen+;t=Max(page);paget.num=pi.num;paget.time=0;if(t=0)paget+1.time+;paget+2.time+;if(t=1)page2.time+;page0.time+;if(t=2)page1.time+;page0.time+;if(k=-1) print(page);i+;cout缺页次数:n 缺页率:n/mendl;if(c=o)/OPT页面置换n=1;while(i=0)i+;elseint temp=0,cn;for(t=0;tN;t+)if(tempCompfu(page,i,t,p)temp=Compfu(page,i,t,p);cn=t;pagecn=pi;n+;print(page);i+;cout缺页次数:n 缺页率:n/mendl;while(c=f|c=l|c=o);return 0;

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

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