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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

操作系统实验四模拟页面置换算法.docx

1、操作系统实验四模拟页面置换算法实验四 实现页面置换算法FIFO和LRU一、实验目的:(1)进一步理解父子进程之间的关系;(2)理解内存页面调度的机理;(3)掌握页面置换算法的实现方法;(4)通过实验比较不同调度算法的优劣;(5)培养综合运用所学知识的能力。页面置换算法是虚拟存储管理实现的关键,通过本次试验理解内存页面调度的机制,在模拟实现FIFO、LRU等经典页面置换算法的基础上,比较各种置换算法的效率及优缺点,从而了解虚拟存储实现的过程。将不同的置换算法放在不同的子进程中加以模拟,培养综合运用所学知识的能力。二、实验内容及要求:(1)这是一个综合型实验,要求在掌握父子进程并发执行机制和内存页

2、面置换算法的基础上,能综合运用这两方面的知识,自行编制程序;(2)程序涉及一个父进程和两个子进程。父进程使用rand()函数随机产生若干随机数,经过处理后,存于一数组Acess_Series中,作为内存页面访问的序列。两个子进程根据这个访问序列,分别采用FIFO和LRU两种不同的页面置换算法对内存页面进行调度。要求:(3)每个子进程应能反映出页面置换的过程,并统计页面置换算法的命中或缺页情况。设缺页的次数为diseffect。总的页面访问次数为total_instruction。 缺页率 = disaffect/total_instruction 命中率 = 1- disaffect/tota

3、l_instruction(4)说明FIFO算法存在的Belady现象。三、实现:数据结构(1) 存放页面访问序列的数组:int Acess_Seriestotal_instruction;int total_instruction; /进程总的页面数(2)用一个结构数组M_Frame记录为进程分配的内存页面的使用情况:struct one_frame /记录为进程分配的内存页面情况; int page_No; /记录页面号 int time; /记录页面进入内存时间 int used_time; /记录页面最近使用时间;one_frame M_Frameframe_num;int frame

4、_num; /驻留集大小(3)本次实验我并没有采用推荐的数据结构struct one_frame int page_no; char flag; ; struct one_frame M_Frameframe_num;是因为我认为这个数据结构并没有很好地体现出FIFO依据进入内存时间来置换页面、LRU依据最近使用时间来置换页面。所以我在自己编写程序时用了我自认为最恰当的数据结构,这也是本程序的大胆创新点。程序流程图图1 父进程流程图图2 子进程pc1流程图图3 子进程pc3流程图四、运行结果及说明上述两幅图为驻留集大小为3的情况上述两幅图为驻留集大小为4的情况 对比不难发现,FIFO算法随着内

5、存页框的增多,缺页率却随之增加,这就是Belady现象;而LRU算法随着内存页框的增多,缺页率随之下降。五、源代码#include#include#include#include#include#include#include#include#includeusing namespace std;int total_instruction; /进程总的页面数int frame_num; /驻留集大小struct one_frame /记录为进程分配的内存页面情况; int page_No; /记录页面号 int time; /记录页面进入内存时间 int used_time; /记录页面最近使

6、用时间;int main() int time1=0,time2=0;/系统时间 int page1,page2; /每次读入一个逻辑页面 int p1=0,p2=0; /内存页框指针,最大为 frame_num int diseffect1=0,diseffect2=0; /缺页次数 float f;/缺页率 printf(Please input the number of Page Frames:n); scanf(%d,&frame_num); one_frame M_Frameframe_num; printf(Please input the number of Pages:n);

7、 scanf(%d,&total_instruction); int Access_seriestotal_instruction; for(int i=0;iframe_num;i+) M_Framei.page_No=-1; int a=0; printf(是否随机生成访问页序号?(1为是)n); scanf(%d,&a); if(a!=1) printf(Please input %d 个数字n,total_instruction); for(int i=0;itotal_instruction;i+) scanf(%d,&Access_seriesi); else /产生随机数,即页面

8、分配情况 for(int i=0;itotal_instruction;i+) Access_seriesi=rand()%total_instruction+1; int pc1,pc2; /两个子进程,p1执行FIFO算法,p2执行LRU算法 while(pc1=fork()=-1); if(pc1=0) for(int i=0;itotal_instruction;i+) int flag1=0; /页面是否已存在于内存中的标志,1表示存在 page1=Access_seriesi; /读入一个逻辑页面 for(int j=0;jp1;j+) /查找该页面是否已存在于内存中 if(pag

9、e1=M_Framej.page_No) for(int i=0;itotal_instruction;i+) printf(%d ,Access_seriesi); printf(n); printf(%d have found!n,page1); M_Framej.used_time=time1; for(int k=0;kp1;k+) printf(%d ,M_Framek.page_No); printf(nn); flag1=1; break; if(flag1=0) /若不存在,发生缺页,缺页次数加1 diseffect1+; if(p1frame_num) /若内存页面没有分配满

10、 M_Framep1.page_No=page1; /分配一个空的内存页面 M_Framep1.time=time1; /新进入的页面要注意记录进入时间 M_Framep1.used_time=time1; p1+; for(int j=0;jtotal_instruction;j+) printf(%d ,Access_seriesj); printf(n); printf(%d diseffect!n,page1); for(int j=0;jp1;j+) printf(%d ,M_Framej.page_No); printf(nn); else /内存中没有,内存又满了,只能使用FIF

11、O算法淘汰内存中最先进入的页面 int min=999,pos=0; /找到内存中最先进入的页面,其占用的内存页面号为 pos for(int j=0;jp1;j+) if(M_Framej.timemin) min=M_Framej.time; pos=j; int temp1=M_Framepos.page_No; M_Framepos.page_No=page1; /将所读的页面调入 M_Framepos.time=time1; /新进入的页面要注意记录进入时间 M_Framepos.used_time=time1; for(int j=0;jtotal_instruction;j+)

12、printf(%d ,Access_seriesj); printf(n); printf(%d diseffect! lose %dn,page1,temp1); for(int j=0;jp1;j+) printf(%d ,M_Framej.page_No); printf(nn); time1+; /系统时间增加 /couti i; f=diseffect1/(total_instruction*1.0); /计算缺页率 printf(diseffect rate of FIFO %fnnn,f); exit(0); wait(0); for(int i=0;iframe_num;i+)

13、 M_Framei.page_No=-1; while(pc2=fork()=-1); if(pc2=0) for(int i=0;itotal_instruction;i+) int flag2=0; page2=Access_seriesi; for(int j=0; jp2; j+) /首先在内存中查找 if(page2=M_Framej.page_No) printf(%d have found!n,page2); M_Framej.used_time=time2; /用到的页面要注意记录最后一次使用时间 for(int k=0; kp2; k+) printf(%d ,M_Frame

14、k.page_No); printf(nn); flag2=1; break; if(flag2=0) /没有找到,发生缺页 diseffect2+; if(p2frame_num) /内存页面还没有分配完 M_Framep2.page_No=page2; M_Framep2.time=time2; M_Framep2.used_time=time2; /用到的页面要注意记录最后一次使用时间 p2+; for(int j=0;jtotal_instruction;j+) printf(%d ,Access_seriesj); printf(n); printf(%d diseffect! n,page2);

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

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