实验五•请求页式存储管理的模拟[实验内容]:熟悉虚拟存储管理的各种页面置换算法,并编写模拟程序实现请求页式存储管理的页面置换算法■-—最近最久未 使用算法(LRU),要求在每次产生置换时显示页面分配状态和缺页率[实验要求]:1、 运行给出的实验程序,查看执行情况,进而分析算法的执行过程,在理解FIFO页面置换算法和最近最久未使 用算法(LRU)置换算法后,给出最佳置换算法的模拟程序实现,并集成到参考程序中2、 执行2个页面置换模拟程序,分析缺页率的情况最好页框数和访问序列长度可调节,在使用同一组访问序 列数据的情况下,改变页框数并执行2个页面置换模拟程序,查看缺页率的变化3、 在每次产生置换时要求显示分配状态和缺页率程序的地址访问序列通过随机数产生,要求具有足够的长度 最好页框数和访问序列长度可调节实验的执行结果如下图所示(左下图为FIFO执行结果,右下图为LRU执行结果):tete请请面面打Fou按FILE请411仃岀要要要若若若1 2 /■ /■/■ /■EE外 Jn贝 AFou 按 Fl印请 龙仃出 若若若jEnter your choice (1 of 2 or 3):打技的是:1「现在为你执行对应操低 卄啪^fifo軍法 M M K M M ——————————请输入要分配的血框数:5请输入要随机生威访问序列的长度;25= ===K 面访问序列===========10 2 2 4 2 S 15 3 1514 11 il fi 2 13 13 & 14 145 ? 9 13 14Enter i/oup choice <1 op 2 op 3>;你按的是:2,圳在为你执行对应操作9 *****^^jLRI 算法 ***** 请输入妥分配贰頁框数:5★输入瓢机生胶访问序列的长度:25 页面访问序列 10 0 2 2 4 2 5 15 3 1514 11 11 6 2 13 13 G 14 145 7 9 13 14$」.3.3-0 0-旦見贝0 12 觥觥籤5 9 7■ ■ ■ 3842好 -旦虫贝 觥缺缺 耳翌贝缺缺缺籤 耳贝 缺缺缺缺 y- y- y- y-0 >0 2 >0 2 >0 2 4 >0 2 4 >0 2 4 5 >0 2 4 5 >3 2 4 5 >3 2 4 5 >3 2 14 5 >3 2 14 ±1 >3 2 14 ±1 >3 6 1—2 & 1^ ±1 >2 & 1^ ±1 >2 & 1^ ±1 >2 & 1^ ±1 >2 & 1^ ±1 >2 & 1^ ±1 >2 & 1^ 5 >? & 1^ 5 >? & 1^ 5 >? 13 1^ 5 >? 13 5 >00000005555555533333339991111111111111111111111内内内内内内内内内内内内内内内内内内内内内内内内内0022425535411 & 233 & 4457J34 1 11111 t—It—I 可可,可可可可可•可•可可•可•可可•可可可可可可可可可可可可$■ 0 0 1 ■ ■ 一 0 0 -ntn^ 缺缺缺 页页页. 缺缺缺缺贝率臣©3 0 _M- ■ ■ -4 5 0 12 .?率苹 缺缺缺5 >101W1W1W1W1W1W151515.336.45 >5 >5 ? 7 ■ ■ ■ 8 2s 3 4 4 率爭军 缺缺缺 MM® XJ \z0 9 5■ ■ ■ 0 2 5 4 4 4率 _n£n^ 页页页. xz xz xz1415111111111111li11111414141414141414141313131315151514一一^^^^441^442^^^^^^^^^^^^^^^^^^ 『内内内内内内内內內內內內内内内内内内内内内内内内内1902242£1s31s141111£21313£1414e?91314--1T--O ■- nlT ■- nlT ku Lfcu Jr-l-LJr-l-」JT-l-L.r~l- 」£-!■ LhJ- LhJ- LhJ- ■- HIT ■- HIT ■- n■- ■- nT ■- nT ■- RIT ■- RIT ■- RIT ■- nlT ■- nlT 伊计.计.计.计计计•廿廿•註计•计•计伊计註註註註V. V.程序源代码:#include #include "windows.h" #include #include #include #include #include #include voidinitialize();//初始化相关数据结构voidcreateps();//随机生成访问序列voiddisplayinfo();//显示当前状态及缺页情况voidfifo();//先进先出算法intfindpage();//查找页面是否在内存voidlru();//最近最久未使用算法intinvalidcount =0; //缺页次数intvpoint;//页面访问指针intpageframe[10];//分配的页框intpagehistory[10]; //记录页框中数据的访问历史intrpoint;//页面替换指针intinpflag;//缺页标志,0为不缺页,1为缺页struct PageInfo{//页面信息结构{int serial[100];//模拟的最大访问页面数,实际控制在20以上int flag;//标志位,0表示无页面访问数据int diseffect;//缺页次数int total_pf;//分配的页框数int total_pn;//访问页面序列长度} pf_info;//////////////////////////////////////////////////////////////////////////初始化相关数据结构void initialize(){int i,pf;inpflag=0;//缺页标志,0为不缺页,1为缺页pf_info.diseffect =0;//缺页次数pf_info.flag =0;//标志位,0表示无页面访问数据printf("\n请输入要分配的页框数:");//自定义分配的页框数 scanf("%d",&pf);pf_info.total_pf =pf;for(i=0;i<100;i++) //清空页面序列{ pf_info.serial[i]=-1;///////////////////////////////////////////////////////////////////// 随机生成访问序列 void createps(void ) {int s,i,pn;initialize(); //初始化相关数据结构printf("\n请输入要随机生成访问序列的长度:");//自定义随机生成访问序列的长度 scanf("%d",&pn);srand(rand()); //初始化随机数队列的"种子" s=((float) rand() / 32767) * 50 + pn; //随机产生页面序列长度 pf_info.total_pn = s;for(i=0;i=0) printf("%3d",pageframe[n]);elseprintf(" ");}printf(" >");if(inpflag==1) //缺页标志,0为不缺页,1为缺页 {printf(" ==>缺页 ");prin tf("缺页率 %3.1f",(floa t)(pf_info.diseffec t)*100.00/vpoin t);}printf("\n");//////////////////////////////////////////////////////////////////////// // 查找页面是否在内存,1为在内存,0为不在即缺页int findpage(int page){int n;for(n=0;n
",ch);if(ch == '3') //选择3,退出{return 0;}else{if(ch == T') //选择 1,FIFO{printf ("\n\n *****执行 FIFO 算法***** \n");fifo();}else{printf (〃\n\n *****执行 LRU 算法***** \n");//lru();}}system("cls") ;}printf("\n\nPress Any Key To Continue:");getch() ;return 0;}。