1、是用队列存储内存中的页面,队列的特点是先进先出,与该算法是一致的,所以每当发生缺页时,就从队头删除一页,而从队尾加入缺页。或者借助辅助数组timemSIZE记录物理块中对应页面的进入时间,每次需要置换时换出进入时间最小的页面。LRU基本思想:是用一维数组pagepSIZE存储页面号序列,memerymSIZE是存储装入物理块中的页面。数组flag10标记页面的访问时间。每当使用页面时,刷新访问时间。发生缺页时,就从物理块中页面标记最小的一页,调出该页,换入所缺的页面。OPT基本思想:数组nextmSIZE记录物理块中对应页面的最后访问时间。每当发生缺页时,就从物理块中找出最后访问时间最大的页面
2、,调出该页,换入所缺的页面。2.实验源程序: #include #include /*全局变量*/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();v
3、oid mDelay(unsigned int Delay);/*主函数*/void main() int i,k,code; system(color 0A); designBy(); printf(请按任意键进行初始化操作. nn getch();clscolor 0B请输入物理块的个数(M=10): scanf(%d,&mSIZE);请输入页面号引用串的个数(P=100):pSIZE); puts(请依次输入页面号引用串(连续输入,无需隔开): for(i=0;ipSIZE;i+)%1dpagei); download();color 0E do puts(输入的页面号引用串为: for
4、(k=0;k=(pSIZE-1)/20;k+) for(i=20*k;(ipSIZE)&20*(k+1); if(i+1)%20=0)|(i+1)%20)&(i=pSIZE-1) printf(%dn,pagei); else%d printf(* * * * * * * * * * * * * * * * * * * * * * *n* 请选择页面置换算法:ttt *n* - *n* 1.先进先出(FIFO) 2.最近最久未使用(LRU) *n* 3.最佳(OPT) 4.退出 *n请选择操作: bbcode); switch(code) case 1: FIFO(); break; case
5、 2: LRU(); case 3: OPT(); case 4: system( designBy(); /*显示设计者信息后退出*/ printf(谢谢使用页面置换算法演示器! 正版授权 n exit(0); default:输入错误,请重新输入: 按任意键重新选择置换算法: getch(); system( while (code!=4);/*载入数据*/void download() int i;color 0Dn正在载入数据,请稍候 !nnLoading.n O51;b50; mDelay(pSIZE+mSIZE)/2);nFinish.n载入成功,按任意键进入置换算法选择界面:vo
6、id print(unsigned int t) int i,j,k,l; int flag; for(k=0; for(i=20*k; if(i+1)%20=0)|(i+1)%20)& printf( else for(j=0;j=j) |%d|,tempij); | | for(i=mSIZE+20*k; for(flag=0,l=0;ll+) if(tempil=tempi-1l) flag+; if(flag=mSIZE)/*页面在物理块中*/ /*每行显示20个*/ if(i%20=0) continue;n-n缺页次数:%dtt,t+mSIZE);缺页率:%d/%dn,t+mSIZ
7、E,pSIZE);置换次数:,t);访问命中率:%d%n,(pSIZE-(t+mSIZE)*100/pSIZE);/*先进先出页面置换算法*/void FIFO() int memery10=0; int time10=0; /*记录进入物理块的时间*/ int i,j,k,m; int max=0; /*记录换出页*/ int count=0; /*记录置换次数*/ /*前mSIZE个数直接放入*/ memeryi=pagei; timei=i; for(j=0; tempij=memeryj; for(i=mSIZE; /*判断新页面号是否在物理块中*/ for(j=0,k=0; if(m
8、emeryj!=pagei) k+; if(k=mSIZE) /*如果不在物理块中*/ count+; /*计算换出页*/ max=time0time1?0:1; for(m=2;mm+) if(timemtimemax) max=m; memerymax=pagei; timemax=i; /*记录该页进入物理块的时间*/ tempij=memeryj; else compute(); print(count);/*最近最久未使用置换算法*/void LRU() int flag10=0; /*记录页面的访问时间*/ flagi=i; else flagj=i; /*刷新该页的访问时间*/ max=flag0flag1? if(flagm=next1? if(nextmnextmax) /*下一次访问时间都为pSIZE,则置换物理块中第一个*/ memerymax=pagei; for(j=0; else 运行后界面:实验结果与分析:FIFO实验结果:LRU实验结果:OPT实验结果:注意事项:通过这次实验我知道了一个好的实验设计思路是十分重要的;我们不要为了实验结果而实验,有时候好的设计思路是我们做起实验来事半功倍。指导教师评价:教师签名: 年 月 日
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1