版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实用文档-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN《操作系统》实验五:页面置换算法模拟实验五.请求页式存储管理的模拟[实验内容]:熟悉虚拟存储管理的各种页面置换算法,并编写模拟程序实现请求页式存储管理的页面置换算法最近最久未使用算法(LRU),要求在每次产生置换时显示页面分配状态和缺页率。[实验要求]:1、运行给出的实验程序,查看执行情况,进而分析算法的执行过程,在理解FIFO页面置换算法和最近最久未使用算法(LRU)置换算法后,给出最佳置换算法的模拟程序实现,并集成到参考程序中。2、执行2个页面置换模拟程序,分析缺页率的情况。最好页框数和访问序列长度可调节,在使用同一组访问序列数据的情况下,改变页框数并执行2个页面置换模拟程序,查看缺页率的变化。3、在每次产生置换时要求显示分配状态和缺页率。程序的地址访问序列通过随机数产生,要求具有足够的长度。最好页框数和访问序列长度可调节。实验的执行结果如下图所示(左下图为FIFO执行结果,右下图为LRU执行结果):程序源代码:#include<>#include""#include<>#include<>#include<>#include<>#include<>#include<>voidinitialize();//初始化相关数据结构voidcreateps();//随机生成访问序列voiddisplayinfo();//显示当前状态及缺页情况voidfifo();//先进先出算法intfindpage();//查找页面是否在内存voidlru();//最近最久未使用算法intinvalidcount=0;//缺页次数intvpoint;//页面访问指针intpageframe[10];//分配的页框intpagehistory[10];//记录页框中数据的访问历史intrpoint;//页面替换指针intinpflag;//缺页标志,0为不缺页,1为缺页structPageInfo//页面信息结构{intserial[100];//模拟的最大访问页面数,实际控制在20以上intflag;//标志位,0表示无页面访问数据intdiseffect;//缺页次数inttotal_pf;//分配的页框数inttotal_pn;//访问页面序列长度}pf_info;//////////////////////////////////////////////////////////////////////////初始化相关数据结构voidinitialize(){ inti,pf; inpflag=0;//缺页标志,0为不缺页,1为缺页 =0;//缺页次数 =0;//标志位,0表示无页面访问数据 printf("\n请输入要分配的页框数:");//自定义分配的页框数scanf("%d",&pf); =pf; for(i=0;i<100;i++)//清空页面序列 {[i]=-1;}}/////////////////////////////////////////////////////////////////////随机生成访问序列voidcreateps(void){ ints,i,pn;initialize();//初始化相关数据结构 printf("\n请输入要随机生成访问序列的长度:");//自定义随机生成访问序列的长度scanf("%d",&pn);srand(rand());//初始化随机数队列的"种子" s=((float)rand()/32767)*50+pn;//随机产生页面序列长度 =s; for(i=0;i<s;i++)//产生随机访问序列 { [i]=((float)rand()/32767)*16;//随机数的大小在0-15之间} }//////////////////////////////////////////////////////////////////////////显示当前状态及缺页情况voiddisplayinfo(void){inti,n;if(vpoint==0){ printf("\n=============页面访问序列=============\n");for(i=0;i<;i++) { printf("%4d",[i]); if((i+1)%10==0)printf("\n");//每行显示10个 }printf("\n======================================\n");}printf("访问%3d:内存<",[vpoint]);for(n=0;n<;n++)//页框信息{if(pageframe[n]>=0) printf("%3d",pageframe[n]); elseprintf("");}printf(">");if(inpflag==1)//缺页标志,0为不缺页,1为缺页{ printf("==>缺页"); printf("缺页率%3.1f",(float)*vpoint);}printf("\n");}//////////////////////////////////////////////////////////////////////////查找页面是否在内存,1为在内存,0为不在即缺页intfindpage(intpage){ intn;for(n=0;n<;n++) { pagehistory[n]++;//访问历史加1 } for(n=0;n<;n++) {if(pageframe[n]==page) { inpflag=0;//inpflag缺页标志,0为不缺页,1为缺页 pagehistory[n]=0;//置访问历史为0 return1; } } inpflag=1; //页面不存在,缺页return0; }//////////////////////////////////////////////////////////////////////////FIFO页面置换算法voidfifo(void){intn,count,pstate;rpoint=0;//页面替换指针初始化为0invalidcount=0;//缺页数初始化为0createps();//随机生成访问序列count=0;//是否装满是所有的页框for(n=0;n<;n++)//清除页框信息{pageframe[n]=-1;}inpflag=0;//缺页标志,0为不缺页,1为缺页for(vpoint=0;vpoint<;vpoint++)//执行算法{ pstate=findpage[vpoint]);//查找页面是否在内存 if(count<//开始时不计算缺页 { if(pstate==0)//页不存在则装入页面 { pageframe[rpoint]=[vpoint]; rpoint=(rpoint+1)%; count++; } } else//正常缺页置换 { if(pstate==0)//页不存在则置换页面 { pageframe[rpoint]=[vpoint]; rpoint=(rpoint+1)%; ++;//缺页次数加1 } }Sleep(10); displayinfo();//显示当前状态} //置换算法循环结束getch();return;}/////////////////////////////////////////////////////////////////////LRU页面置换算法voidlru(void){intn,count,pstate,max;rpoint=0;//页面替换指针invalidcount=0;//缺页次数初始化为0createps();//随机生成访问序列count=0;//是否装满所有的页框for(n=0;n<;n++){ pageframe[n]=-1;//清除页框信息 pagehistory[n]=0;//清除页框历史}inpflag=0;//缺页标志,0为不缺页,1为缺页for(vpoint=0;vpoint<;vpoint++)//执行算法{ pstate=findpage[vpoint]);//查找页面是否在内存 if(count<//开始时不计算缺页 {if(pstate==0)//页不存在则装入页面 { pageframe[rpoint]=[vpoint];//把要调入的页面放入一个空的页框里 rpoint=(rpoint+1)%; count++; } } else//正常缺页置换 { if(pstate==0)//页不存在则置换页面 { max=0; for(n=1;n<;n++) { if(pagehistory[n]>pagehistory[max]) { max=n; } } rpoint=max; pageframe[rpoint]=[vpoint]; pagehistory[rpoint]=0; ++;//缺页次数加1 } }Sleep(10); displayinfo();//显示当前状态} //置换算法循环结束_getch();return;}/////////////////////最佳置换算法自己完成/////////////////////////////////////////////////////////////////////主函数intmain(){charch;system("cls");while(true){printf("*******************************************\n");printf("若要执行FIFO页面置算法请按1\n"); printf("若要执行LRU页面置算法请按2\n");printf("若要退出请按3\n");printf("*******************************************\n");printf("Enteryourchoice(1or2or3):"); do {//如果输入信息不正确,继续输入ch=(char)getch(); }while(ch!='1'&&ch!='2'&&ch!='3');printf("\n\n你按的是:%c,现在为你执行对应操作。",ch);if(ch==
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论