1、 实验五、 请求页式存储管理得模拟实验内容:熟悉虚拟存储管理得各种页面置换算法,并编写模拟程序实现请求页式存储管理得页面置换算法最近最久未使用算法(RU),要求在每次产生置换时显示页面分配状态与缺页率。实验要求:1、运行给出得实验程序,查瞧执行情况,进而分析算法得执行过程,在理解FFO页面置换算法与最近最久未使用算法(LR)置换算法后,给出最佳置换算法得模拟程序实现,并集成到参考程序中。2、执行2个页面置换模拟程序,分析缺页率得情况。最好页框数与访问序列长度可调节,在使用同一组访问序列数据得情况下,改变页框数并执行2个页面置换模拟程序,查瞧缺页率得变化。、在每次产生置换时要求显示分配状态与缺页
2、率.程序得地址访问序列通过随机数产生,要求具有足够得长度。最好页框数与访问序列长度可调节。实验得执行结果如下图所示(左下图为FIFO执行结果,右下图为LRU执行结果):程序源代码:#incldeincld wndows、h”#inclde inclde stdlb、#include fstream、h#includeo、hinlude #iclud oid intie(); /初始化相关数据结构vod creteps(); /随机生成访问序列void dspyn(); /显示当前状态及缺页情况id fio(); /先进先出算法int fndpage(); /查找页面就是否在内存volru();
3、 /最近最久未使用算法nt invaidcot ; / 缺页次数int vpoin; /页面访问指针int paefre1; / 分配得页框nt paehtoy0; /记录页框中数据得访问历史int oint; /页面替换指针t ila; 缺页标志,0为不缺页,为缺页struct PagInfo /页面信息结构 in serial10; / 模拟得最大访问页面数,实际控制在20以上 int ag; / 标志位,0表示无页面访问数据 int disfet; / 缺页次数 it otal_f; / 分配得页框数 int oapn; / 访问页面序列长度 f_ifo;/初始化相关数据结构o inti
4、alize() ini,f;inpfag=0; /缺页标志,0为不缺页,1为缺页f_inf、diseffct =0; / 缺页次数pfinfo、lag0; / 标志位,0表示无页面访问数据printf(请输入要分配得页框数:); / 自定义分配得页框数 scanf(,pf);pinfo、totapf =p; (i=;i00;i+) / 清空页面序列 pf_nf、serili; /随机生成访问序列oideps(id)i,i,n; initiaize(); /初始化相关数据结构prntf(”请输入要随机生成访问序列得长度:”); /自定义随机生成访问序列得长度 saf(d,pn); sad(n()
5、); /初始化随机数队列得”种子”s=((float)and()/ 2767) * 50 n; 随机产生页面序列长度f_ino、ttl= s;or(=0;;i+) /产生随机访问序列 f_nfo、serili=(foa) rad() / 2767) *16 ; /随机数得大小在05之间 / 显示当前状态及缺页情况od displaynfo(o) t i,n; if(voint=0) prtf(=页面访问序列=n”); for(i=0; ); if(inpfag=1) /缺页标志,0为不缺页,1为缺页 ritf( =缺页 ); prntf(”缺页率3.1,(loat)(ffo、difft)*10
6、、00/vpoit); printf(n); / 查找页面就是否在内存,1为在内存,0为不在即缺页intfndge( pge)itn; for(0;p_ino、otl_p;n+)pagehisoyn +; / 访问历史加1for(n=0;npf_inf、totalpf;n+) if(pefmen=pge) inlg=0; /nflag缺页标志,0为不缺页,1为缺页 pgestory=0; /置访问历史为0 run 1; npla=1; /页面不存在,缺页 retur0; / FIFO页面置换算法oid f(void) tn,count,psae; rpi=0; / 页面替换指针初始化为 inv
7、adoun =0; / 缺页数初始化为ateps(); / 随机生成访问序列 cont=0; / 就是否装满就是所有得页框 fr(=;nf_info、otl_pf;n+) / 清除页框信息 peframen=-1; inflg0; /缺页标志,0为不缺页,1为缺页 for(vpt=0;pont_nfo、totalpn;voint+) 执行算法 pate=indage(f_no、selvpo); /查找页面就是否在内存 i(ontfinfo、totpf) / 开始时不计算缺页 if(stte=0) / 页不存在则装入页面 agefrmerpoin=pfinf、erlvpoin;roint=(rp
8、oint+1) % pfinf、total_f;count+; els / 正常缺页置换 if(sate=) / 页不存在则置换页面 pgefamrotf_nfo、ialvpnt;roit=(rpn+1) pf_info、total;f_ino、ieffect+; / 缺页次数加1 Sle(1); isplayino(); / 显示当前状态 / 置换算法循环结束 etc(); retun;/ RU页面置换算法void lru(voi) int n,count,pstte,max; oint=0; /页面替换指针ildcoun = 0; /缺页次数初始化为0 reatps(); / 随机生成访问
9、序列 coun=; / 就是否装满所有得页框 o(n=0;f_info、otl_pf;n+) pgframe=1; / 清除页框信息 pagison0; / 清除页框历史 ipflag; /缺页标志,为不缺页,1为缺页 for(vpoint=0;vpontf_fo、ttan;voit+) / 执行算法 pstat=fidpage(pf_ino、seialvpint); /查找页面就是否在内存 if(countfifo、ttl_pf) / 开始时不计算缺页 if(pta=0) / 页不存在则装入页面 ageframerpoi=pf_io、serialpint; /把要调入得页面放入一个空得页框里
10、rpoin(rpoint+) p_no、ttal_pf;count+; else / 正常缺页置换 i(state=)/ 页不存在则置换页面 m=0;for(n=;npf_、ta_pf;n+) (ageornpagehisrx) max=n; rpoi=ma; pagefamerpont=fifo、serapoit; agehisorpoin=0; pfinfo、disfet+;/缺页次数加 Sep(10); dilayinfo(); / 显示当前状态 / 置换算法循环结束 geh(); eturn;/最佳置换算法 自己完成/主函数inta() charc;system(c) ; while(
11、 tru) printf(*n”); pritf(” 若要执行FIFO页面置算法请按1”);rintf(” 若要执行L 页面置算法请按); rintf(” 若要退出请按3n); ri(”*); rint( nter our choice ( or 3): ); do /如果输入信息不正确,继续输入 h = (hr)getch() ;whle(h!=1 ch!= 2& h != 3); print(”n您按得就是:%c ,现在为您执行对应操作.,c); if(ch= 3) 选择,退出 rtu ;sif(c =1) /选择1,IFOpnt(nn-*执行IFO算法*-n); fifo(); le printf(nn-*执行LRU算法*-”); /lr();stem(cls”) ; printf(”nnPres AnKey To Contnu:); getch() ; etun0;