《页面置换算法模拟――OPT、FIFO和LRU算法》由会员分享,可在线阅读,更多相关《页面置换算法模拟――OPT、FIFO和LRU算法(16页珍藏版)》请在金锄头文库上搜索。
1、操作系统实验报告页面置换算法模拟OFT、FIFO和LRU算法 班级:2021级软件工程1班 学号:X X X 姓名:萧氏一郎数据构造说明:Memery10物理块中的页码Page100页面号引用串Temp10010辅助数组Void print(unsigned int t)辅助函数Viod FIFO先进先出页面置换算法Viod LRU最近最久未使用置换换算法Viod OPT最正确置换算法流程图:开始NONONOYesYesYes完毕页号序列载完?根据选择的置换算法完成号存在物理块中引用编号大于物理块数将页号放入物理地址中编号载入序列号,从第0个得到页号 源代码:#include #include
2、 /*全局变量*/int mSIZE; /*物理块数*/int pSIZE; /*页面号引用串个数*/static int memery10=0; /*物理块中的页号*/static int page100=0; /*页面号引用串*/static int temp10010=0; /*辅助数组*/*置换算法函数*/void FIFO();void LRU();void OPT();/*辅助函数*/void print(unsigned int t);void designBy();void download();void mDelay(unsigned int Delay);/*主函数*/vo
3、id main() int i,k,code;printf(请输入物理块的个数(M=10):);scanf(%d,&mSIZE);printf(请输入页面号引用串的个数(P=100):);scanf(%d,&pSIZE);puts(请依次输入页面号引用串(连续输入,无需隔开):);for(i=0;ipSIZE;i+) scanf(%1d,&pagei);download(); doputs(输入的页面号引用串为:);for(k=0;k=(pSIZE-1)/20;k+)for(i=20*k;(ipSIZE)&(i);getch(); while (code!=4);getch();/*载入数据*
4、/void download()printf(nFinish.n载入成功!);/*设置延迟*/void mDelay(unsigned int Delay) unsigned int i; for(;Delay0;Delay-)for(i=0;i124;i+)printf( b);/*显示设计者信息*/void print(unsigned int t)int i,j,k,l;int flag;for(k=0;k=(pSIZE-1)/20;k+)for(i=20*k;(ipSIZE)&(i20*(k+1);i+)if(i+1)%20=0)|(i+1)%20)&(i=pSIZE-1)printf
5、(%dn,pagei);elseprintf(%d ,pagei);for(j=0;jmSIZE;j+)for(i=20*k;(imSIZE+20*k)&(i=j)printf( |%d|,tempij);elseprintf( | |);for(i=mSIZE+20*k;(ipSIZE)&(i20*(k+1);i+)for(flag=0,l=0;lmSIZE;l+)if(tempil=tempi-1l)flag+;if(flag=mSIZE)/*页面在物理块中*/printf( );elseprintf( |%d|,tempij);/*每行显示20个*/if(i%20=0)continue;
6、printf(n);printf(-n);printf(缺页次数:%dtt,t+mSIZE);printf(缺页率:%d/%dn,t+mSIZE,pSIZE);printf(置换次数:%dtt,t);printf(访问命中率:%d%n,(pSIZE-(t+mSIZE)*100/pSIZE);printf(-n);/*计算过程延迟*/void compute()int i;printf(正在进展相关计算,请稍候);for(i=0;i+30;printf(b);for(i=0;i+30;printf( );for(i=0;i+30;printf(b);/*先进先出页面置换算法*/void FIFO
7、() int memery10=0; int time10=0; /*记录进入物理块的时间*/ int i,j,k,m; int max=0; /*记录换出页*/ int count=0; /*记录置换次数*/*前mSIZE个数直接放入*/ for(i=0;imSIZE;i+) memeryi=pagei; timei=i; for(j=0;jmSIZE;j+)tempij=memeryj; for(i=mSIZE;ipSIZE;i+) /*判断新页面号是否在物理块中*/ for(j=0,k=0;jmSIZE;j+) if(memeryj!=pagei) k+; if(k=mSIZE) /*假
8、设不在物理块中*/ count+;/*计算换出页*/ max=time0time1?0:1;for(m=2;mmSIZE;m+)if(timemtimemax)max=m; memerymax=pagei; timemax=i; /*记录该页进入物理块的时间*/ for(j=0;jmSIZE;j+)tempij=memeryj; else for(j=0;jmSIZE;j+)tempij=memeryj; compute();print(count);/*最近最久未使用置换算法*/void LRU() int memery10=0; int flag10=0; /*记录页面的访问时间*/ int i,j,k,m; int max=0; /*记录换出页*/ int count=0; /*记录置换次数*/*前mSIZE个数直接放入*/ for(i=0;imSIZE;i+) memeryi=pagei; flagi=i; for(j=0;jmSIZE;j+)tempij=memeryj;