1、页面置换算法模拟OPTFIFO和LRU算法页面置换算法模拟OPT、FIFO和LRU算法操作系统实验报告页面置换算法模拟OFT、FIFO和LRU算法 班级:2013级软件工程1班 学号:X X X 姓名:萧氏一郎数据结构说明:Memery10物理块中的页码Page100页面号引用串Temp10010辅助数组Void print(unsigned int t)辅助函数Viod FIFO()先进先出页面置换算法Viod LRU()最近最久未使用置换换算法Viod OPT()最佳置换算法流程图:NONOYesYes 源代码:#include #include /*全局变量*/int mSIZE; /*
2、物理块数*/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);/*主函数*/void main() printf(* * *
3、 * * * * * * * * * * * * * * * * * * * *n); printf(* 请选择页面置换算法:ttt *n); printf(* - *n); printf(* 1.先进先出(FIFO) 2.最近最久未使用(LRU) *n); printf(* 3.最佳(OPT) 4.退出 *n); printf(* * * * * * * * * * * * * * * * * * * * * * *n); printf(请选择操作: bb); scanf(%d,&code); switch(code) case 1: FIFO(); break; case 2: LRU()
4、; break; case 3: OPT(); break; case 4: system(cls); /system(color 0A); exit(0); default: printf(输入错误,请重新输入:); printf(按任意键重新选择置换算法:); getch(); while (code!=4); getch();/*载入数据*/void download() printf(nFinish.n载入成功!);/*设置延迟*/void mDelay(unsigned int Delay) unsigned int i; for(;Delay0;Delay-) for(i=0;i1
5、24;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(%dn,pagei); else printf(%d ,pagei); for(j=0;jmSIZE;j+) for(i=20*k;(imSIZE+20*k)&(i=j) printf( |%d|,tempij); else pr
6、intf( | |); 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( ); else printf( |%d|,tempij); /*每行显示20个*/ if(i%20=0) continue; printf(n); printf(-n); printf(缺页次数:%dtt,t+mSIZE); printf(缺页率:%d/%dn,t+mSIZE,pSIZE); printf(置换次数:%
7、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() int memery10=0; int time10=0; /*记录进入物理块的时间*/ int i,j,k,m; int max=0; /*记录换出页*/ int
8、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) /*如果不在物理块中*/ count+; /*计算换出页*/ max=time0time1?0:1; for(m=2;mmSIZE;m+) if(timemtimemax)
9、 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
10、(i=0;imSIZE;i+) memeryi=pagei; flagi=i; for(j=0;jmSIZE;j+) tempij=memeryj; for(i=mSIZE;ipSIZE;i+) /*判断新页面号是否在物理块中*/ for(j=0,k=0;jmSIZE;j+) if(memeryj!=pagei) k+; else flagj=i; /*刷新该页的访问时间*/ if(k=mSIZE) /*如果不在物理块中*/ count+; /*计算换出页*/ max=flag0flag1?0:1; for(m=2;mmSIZE;m+) if(flagmflagmax) max=m; meme
11、rymax=pagei; flagmax=i; /*记录该页的访问时间*/ for(j=0;jmSIZE;j+) tempij=memeryj; else for(j=0;jmSIZE;j+) tempij=memeryj; compute(); print(count);/*最佳置换算法*/void OPT() int memery10=0; int next10=0; /*记录下一次访问时间*/ int i,j,k,l,m; int max; /*记录换出页*/ int count=0; /*记录置换次数*/ /*前mSIZE个数直接放入*/ for(i=0;imSIZE;i+) meme
12、ryi=pagei; 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) /*如果不在物理块中*/ count+; /*得到物理快中各页下一次访问时间*/ for(m=0;mmSIZE;m+) for(l=i+1;l=next1?0:1; for(m=2;mnextmax) max=m; /*下一次访问时间都为pSIZE,则置换物理块中第一个*/ memerymax=pagei; for(j=0;jmSIZE;j+) tempij=memeryj; else for(j=0;jmSIZE;j+) tempij=memeryj; compute(); print(count);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1