《操作系统》实验五:页面置换算法模拟.doc

上传人:scccc 文档编号:12398387 上传时间:2021-12-03 格式:DOC 页数:17 大小:185KB
返回 下载 相关 举报
《操作系统》实验五:页面置换算法模拟.doc_第1页
第1页 / 共17页
《操作系统》实验五:页面置换算法模拟.doc_第2页
第2页 / 共17页
《操作系统》实验五:页面置换算法模拟.doc_第3页
第3页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《《操作系统》实验五:页面置换算法模拟.doc》由会员分享,可在线阅读,更多相关《《操作系统》实验五:页面置换算法模拟.doc(17页珍藏版)》请在三一文库上搜索。

1、实验五请求页式存储管理的模拟实验内容:熟悉虚拟存储管理的各种页面置换算法,并编写模拟程序实现请求页式存储管理的页面置换算法-最近最久未使用算法(LRU),要求在每次产生置换时显示页面分配状态和缺页率。实验要求:1、 运行给出的实验程序,查看执行情况,进而分析算法的执行过程,在理解FIFO页面置换算法和最近最久未 使用算法(LRU)置换算法后,给出最佳置换算法的模拟程序实现,并集成到参考程序中。2、执行2个页面置换模拟程序,分析缺页率的情况。最好页框数和访问序列长度可调节,在使用同一组访问序列数据的情况下,改变页框数并执行2个页面置换模拟程序,查看缺页率的变化。3、 在每次产生置换时要求显示分配

2、状态和缺页率。程序的地址访问序列通过随机数产生,要求具有足够的长度。 最好页框数和访问序列长度可调节。实验的执行结果如下图所示(左下图为FIFO执行结果,右下图为 LRU执行结果):1 2 f yb Jfi yk SE 请请 w算出 要要要 若若若fl叽 若奠退出请按LRUhter your choice <i or 2 or 3):Enter your choice (1 of 2 av 3):你按的是,1圳在为你执行对应操作.行円F0算法* -请输入要分配的頁框数 5请输入要随机生成访问序列的长度* 25 严按的是:2,现在为你执行对应操作。*fll行 LHU 翳请输入要分配的页框数

3、;5请输入要随机生成访问序列的长度;25Is14贞面访问序列=2 2 4 2 5 15 3 1511 6 2 13 13 6 14 149 13 14H = H =贡血访问序列I 022425 153 1511 1162 13 136 14 1479 13 14=一一$*00.蠶率 m 缺缺缺 EXI 缺缺駅 7 7 7101004W4.3丸IMI缺缺缺m> > >0 4 0 6£H缺缺> V/5 9 7 *8 2 6MIK缺缺缺H缺缺ifc> > >5 5 511140424547缺缺缺缺.缺缺缺»> > > &

4、gt;4 4 4 4 411111333333399 91111111ccczxccc/xzxcccccccccccccccc存存存存存存#<存存存存存存存存存#<存存存存#<存-KK内内内内内内内内内内内内内内内内内内内内内内内00 2 242553541 1 6 2336445793 41 lilil Illi 11,一 rblr.lrb-rrjio.il ?ri J 一 JL,r>r>-ir J r>-rTJJri- UHJ-fcJ-fcu -"o-,- _J - 1r J 廿廿廿廿廿廿廿廿廿卄廿廿7>廿廿计廿廿廿廿L$00 KIA 缺

5、缺缺 m 缺缺缺3 0 k K 4 5im缺缺缺-> > >缺JX3B.0 “缺瓦缺贡聿36.45 9 7 8 2 63 4 4n缺缺缺m缺缺缺> > A0 9 5 404245 缺铁缺 m 缺缺缺 7 7 7缺贝45.84444444771 4 4 1 1 3 31存存存存存存存存存存存#<存存存存存#<存存存存#<存存 内内-EZK内内内内内内内内内-EZK内内内内内内内内内内101010la10le1 1 1 11- 1 4i J14 4 4 41 1 13 3 3 31 1152 2 21J±411413121320224 25

6、535 4 1162336445 7 ?341 11111 1111 11 -nJ-rT tj feu-fcu-fcj-r JJST J_T*fcj-fcj-LHJE> fcj fcurfcu-UHJ*LHI_-tj -otjfcj-ITET JJ7-I-程序源代码:#i nclude <libio.h>#in elude "wi ndows.h"#in elude <coni o.h>#in elude <stdlib.h>#in elude <fstream.h>#i nclude <io.h>#in e

7、lude <stri ng.h>#in elude <stdio.h>void in itialize();/初始化相关数据结构void createps();/随机生成访问序列void displayi nfo();/显示当前状态及缺页情况void fifo();/先进先出算法intfin dpage();/查找页面是否在内存void lru();/最近最久未使用算法intin validco unt = 0;/缺页次数intvpoi nt;/页面访问指针intpageframe10;/分配的页框intpagehistory10;/记录页框中数据的访问历史intrpo

8、i nt;/页面替换指针intin pflag;/缺页标志,0为不缺页,1为缺页struct Page Info/页面信息结构int serial100; /模拟的最大访问页面数,实际控制在20以上intflag;/标志位,0表示尢页面访问数据intdiseffect;/缺页次数inttotal_pf;/分配的页框数inttotal_p n;/访冋页面序列长度 pf_info;/初始化相关数据结构void in itialize()int i,pf;in pflag=0;/缺页标志,0为不缺页,1为缺页pf_in fo.diseffect =0;/缺页次数pf_in fo.flag =0;/标

9、志位,0表示无页面访冋数据printf("n请输入要分配的页框数:”);/自定义分配的页框数scan f("%d",&pf);pf_in fo.total_pf =pf;for(i=0;i<100;i+)/ 清空页面序列pf_in fo.seriali=-1;/随机生成访问序列void createps(void )int s,i,p n;initialize();/初始化相关数据结构printf("n请输入要随机生成访问序列的长度:”);/自定义随机生成访问序列的长度scan f("%d",&pn);srand

10、(rand();/初始化随机数队列的”种子”s=(float) ra nd() / 32767) * 50 + pn;/ 随机产生页面序列长度pf_in fo.total_p n = s;for(i=0;i<s;i+)/产生随机访问序列pf_info.seriali=(float) rand() / 32767) * 16 ;/ 随机数的大小在 0-15 之间/显示当前状态及缺页情况void displayi nfo(void)int i,n;if(vpo in t=0)prin tf("n=页面访问序歹U =、n");for(i=0; i<pf_ in fo.

11、total_p n; i+)prin tf("%4d",pf_i nfo.seriali);if (i+1) % 10 =0) printf("n");/ 每行显示 10 个prin tf("n=n");printf("访问 %3d :内存 <",pf_info.serialvpoint);for(n=0;n<pf_info.total_pf;n+)/ 页框信息if (pageframe n >=0)prin tf("%3d",pageframe n);elseprintf(&

12、quot; ");printf(” >");if(inpflag=1)/缺页标志,0为不缺页,1为缺页printf("=> 缺页");printf("缺页率 3.1f",(float)(pf_info.diseffect)*100.00/vpoint);prin tf("n");/查找页面是否在内存,1为在内存,0为不在即缺页int fin dpage(i nt page)int n;for(n=0;n<pf_in fo.total_pf; n+)pagehistoryn +;/ 访问历史加 1f

13、or(n=0;n<pf_in fo.total_pf; n+)if (pageframe n=page )1为缺页inpflag=0 ;/inpflag缺页标志,0为不缺页,pagehistoryn=0;/ 置访问历史为 0return 1;inpflag=1;/页面不存在,缺页return 0;/ FIFO页面置换算法 void fifo(void)int n,coun t,pstate;rpo in t=0;/页面替换指针初始化为 0in validco unt = 0;/缺页数初始化为0createps();/随机生成访问序列coun t=0;/是否装满是所有的页框for(n=0;

14、 n<pf_i nfo.total_pf; n+) /清除页框信息pageframe n=-1;inpflag=0;/缺页标志,0为不缺页,1为缺页for(vpoint=0;vpoint<pf_info.total_pn;vpoint+)/ 执行算法pstate=findpage(pf_info.serialvpoint);/ 查找页面是否在内存if(count<pf_info.total_pf)/ 开始时不计算缺页if(pstate=0)/页不存在则装入页面pageframerpo in t=pf_i nfo.serialvpo in t;rpo in t=(rpo in

15、t+1) % pf_in fo.total_pf;coun t+;else/正常缺页置换if(pstate=O)/页不存在则置换页面pageframerpo in t=pf_ in fo.serialvpo in t;rpo in t=(rpo in t+1) % pf_in fo.total_pf;pf_info.diseffect+;/ 缺页次数加 1Sleep(10);displayinfo();/ 显示当前状态/置换算法循环结束getch();return;/ LRU页面置换算法void Iru(void) int n,coun t,pstate,max;rpoin t=0;II页面替

16、换指针in validco unt = 0;II缺页次数初始化为 0createps();II随机生成访问序列coun t=0;II是否装满所有的页框for(n=0;n<pf_in fo.total_pf; n+)pageframen=-1;II清除页框信息pagehistoryn=0;II 清除页框历史inpflag=0; II缺页标志,0为不缺页,1为缺页for(vpo in t=0;vpo in t<pf_ in fo.total_p n; vpo in t+)II执行算法pstate=findpage(pf_info.serialvpoint);II 查找页面是否在内存if

17、(count<pf_info.total_pf)II 开始时不计算缺页if(pstate=0) II页不存在则装入页面pageframerpoi nt=pf_i nfo.serialvpoi nt; II把要调入的页面放入一个空的页框里rpo in t=(rpo in t+1) % pf_in fo.total_pf;coun t+;else /正常缺页置换if(pstate=O)页不存在则置换页面max=O;for(n=1; n<pf_ in fo.total_pf; n+)if(pagehistory n >pagehistorymax)max =n;rpoi nt=ma

18、 x;pageframerpo in t=pf_ in fo.serialvpo in t; pagehistoryrpo in t=0;pf_info.diseffect+; / 缺页次数加 1 Sleep(10);displayinfo();/ 显示当前状态 /置换算法循环结束_getch();return;/最佳置换算法自己完成/ 主函数int mai n()char ch;system("cls");while ( true )printf(* n");printf("若要执行FIFO页面置算法请按printf(”若要执行LRU页面置算法请按pr

19、intf(”若要退出请按3n");1 n");2n");printf(* n");prin tf( "E nter your choice (1 or 2 or 3):"); do/如果输入信息不正确,继续输入ch = (char)getch();while(ch != '1' && ch != 2&& ch != 3);printf("nn 你按的是:%c ,现在为你执行对应操作。”,ch);if(ch = 3) / 选择 3,退出return 0;elseif(ch = '1')/ 选择 1,FIFOprintf("nn*执行 FIFO 算法 *n");fifo();elseprintf("nn*执行 LRU 算法 *n");/lru();system("cls"); prin tf("nnPress Any Key To Contin ue:");getch();return 0;感谢下载!欢迎您的下载,资料仅供参考

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1