还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
武夷学院综合性实验报告数学与计算机学院计科专业2011级
(1)班2013-2014学年第一学期学号姓名指导教师课程名称操作系统实验项目名称存储器管理—页面置换算法同组成员实验地点瑞樟6-307实验时间实验目的与要求通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率实验原理及内容设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率1.最佳淘汰算法(OPT)2.先进先出的算法(FIFO)3.最近最久未使用算法(LRU)实验设备与材料
1.硬件PC机一台
2.软件Windows操作系统、C语言MyTC或VisualC++运行环境实验方法与步骤
1.实验思想:FIFO基本思想是用队列存储内存中的页面,队列的特点是先进先出,与该算法是一致的,所以每当发生缺页时,就从队头删除一页,而从队尾加入缺页或者借助辅助数组time[mSIZE]记录物理块中对应页面的进入时间,每次需要置换时换出进入时间最小的页面LRU基本思想是用一维数组page[pSIZE]存储页面号序列,memery[mSIZE]是存储装入物理块中的页面数组flag
[10]标记页面的访问时间每当使用页面时,刷新访问时间发生缺页时,就从物理块中页面标记最小的一页,调出该页,换入所缺的页面OPT基本思想是用一维数组page[pSIZE]存储页面号序列,memery[mSIZE]是存储装入物理块中的页面数组next[mSIZE]记录物理块中对应页面的最后访问时间每当发生缺页时,就从物理块中找出最后访问时间最大的页面,调出该页,换入所缺的页面
2.实验源程序#includestdio.h#includestdlib.h/*全局变量*/intmSIZE;/*物理块数*/intpSIZE;/*页面号引用串个数*/staticintmemery
[10]={0};/*物理块中的页号*/staticintpage
[100]={0};/*页面号引用串*/staticinttemp
[100]
[10]={0};/*辅助数组*//*置换算法函数*/voidFIFO;voidLRU;voidOPT;/*辅助函数*/voidprintunsignedintt;voiddesignBy;voiddownload;voidmDelayunsignedintDelay;/*主函数*/void__in{intikcode;systemcolor0A;designBy;printf┃请按任意键进行初始化操作...┃\n;printf┗━━━━━━━━━━━━━━━━━━━━━━━━━┛\n;printf;getch;systemcls;systemcolor0B;printf请输入物理块的个数M=10;scanf%dmSIZE;printf请输入页面号引用串的个数P=100;scanf%dpSIZE;puts请依次输入页面号引用串连续输入,无需隔开;fori=0;ipSIZE;i++scanf%1dpage[i];download;systemcls;systemcolor0E;do{puts输入的页面号引用串为;fork=0;k=pSIZE-1/20;k++{fori=20*k;ipSIZEi20*k+1;i++{ifi+1%20==0||i+1%20i==pSIZE-1printf%d\npage[i];elseprintf%dpage[i];}}printf***********************\n;printf*请选择页面置换算法\t\t\t*\n;printf*-----------------------------------------*\n;printf*
1.先进先出FIFO
2.最近最久未使用LRU*\n;printf*
3.最佳OPT
4.退出*\n;printf***********************\n;printf请选择操作[]\b\b;scanf%dcode;switchcode{case1:FIFO;break;case2:LRU;break;case3:OPT;break;case4:systemcls;systemcolor0A;designBy;/*显示设计者信息后退出*/printf┃谢谢使用页面置换算法演示器!正版授权㊣┃\n;printf┗━━━━━━━━━━━━━━━━━━━━━━━━━┛\n;exit0;default:printf输入错误,请重新输入;}printf按任意键重新选择置换算法;getch;systemcls;}whilecode!=4;getch;}/*载入数据*/voiddownload{inti;systemcolor0D;printf╔════════════╗\n;printf║正在载入数据,请稍候!!!║\n;printf╚════════════╝\n;printfLoading...\n;printfO;fori=0;i51;i++printf\b;fori=0;i50;i++{mDelaypSIZE+mSIZE/2;printf;}printf\nFinish.\n载入成功,按任意键进入置换算法选择界面;getch;}voidprintunsignedintt{intijkl;intflag;fork=0;k=pSIZE-1/20;k++{fori=20*k;ipSIZEi20*k+1;i++{ifi+1%20==0||i+1%20i==pSIZE-1printf%d\npage[i];elseprintf%dpage[i];}forj=0;jmSIZE;j++{fori=20*k;imSIZE+20*kipSIZE;i++{ifi=jprintf|%d|temp[i][j];elseprintf||;}fori=mSIZE+20*k;ipSIZEi20*k+1;i++{forflag=0l=0;lmSIZE;l++iftemp[i][l]==temp[i-1][l]flag++;ifflag==mSIZE/*页面在物理块中*/printf;elseprintf|%d|temp[i][j];}/*每行显示20个*/ifi%20==0continue;printf\n;}}printf----------------------------------------\n;printf缺页次数%d\t\tt+mSIZE;printf缺页率%d/%d\nt+mSIZEpSIZE;printf置换次数%d\t\tt;printf访问命中率%d%%\npSIZE-t+mSIZE*100/pSIZE;printf----------------------------------------\n;}/*先进先出页面置换算法*/voidFIFO{intmemery
[10]={0};inttime
[10]={0};/*记录进入物理块的时间*/intijkm;int__x=0;/*记录换出页*/intcount=0;/*记录置换次数*//*前mSIZE个数直接放入*/fori=0;imSIZE;i++{memery[i]=page[i];time[i]=i;forj=0;jmSIZE;j++temp[i][j]=memery[j];}fori=mSIZE;ipSIZE;i++{/*判断新页面号是否在物理块中*/forj=0k=0;jmSIZE;j++{ifmemery[j]!=page[i]k++;}ifk==mSIZE/*如果不在物理块中*/{count++;/*计算换出页*/__x=time
[0]time
[1]0:1;form=2;mmSIZE;m++iftime[m]time[__x]__x=m;memery[__x]=page[i];time[__x]=i;/*记录该页进入物理块的时间*/forj=0;jmSIZE;j++temp[i][j]=memery[j];}else{forj=0;jmSIZE;j++temp[i][j]=memery[j];}}compute;printcount;}/*最近最久未使用置换算法*/voidLRU{intmemery
[10]={0};intflag
[10]={0};/*记录页面的访问时间*/intijkm;int__x=0;/*记录换出页*/intcount=0;/*记录置换次数*//*前mSIZE个数直接放入*/fori=0;imSIZE;i++{memery[i]=page[i];flag[i]=i;forj=0;jmSIZE;j++temp[i][j]=memery[j];}fori=mSIZE;ipSIZE;i++{/*判断新页面号是否在物理块中*/forj=0k=0;jmSIZE;j++{ifmemery[j]!=page[i]k++;elseflag[j]=i;/*刷新该页的访问时间*/}ifk==mSIZE/*如果不在物理块中*/{count++;/*计算换出页*/__x=flag
[0]flag
[1]0:1;form=2;mmSIZE;m++ifflag[m]flag[__x]__x=m;memery[__x]=page[i];flag[__x]=i;/*记录该页的访问时间*/forj=0;jmSIZE;j++temp[i][j]=memery[j];}else{forj=0;jmSIZE;j++temp[i][j]=memery[j];}}compute;printcount;}/*最佳置换算法*/voidOPT{intmemery
[10]={0};intnext
[10]={0};/*记录下一次访问时间*/intijklm;int__x;/*记录换出页*/intcount=0;/*记录置换次数*//*前mSIZE个数直接放入*/fori=0;imSIZE;i++{memery[i]=page[i];forj=0;jmSIZE;j++temp[i][j]=memery[j];}fori=mSIZE;ipSIZE;i++{/*判断新页面号是否在物理块中*/forj=0k=0;jmSIZE;j++{ifmemery[j]!=page[i]k++;}ifk==mSIZE/*如果不在物理块中*/{count++;/*得到物理快中各页下一次访问时间*/form=0;mmSIZE;m++{forl=i+1;lpSIZE;l++ifmemery[m]==page[l]break;next[m]=l;}/*计算换出页*/__x=next
[0]=next
[1]0:1;form=2;mmSIZE;m++ifnext[m]next[__x]__x=m;/*下一次访问时间都为pSIZE则置换物理块中第一个*/memery[__x]=page[i];forj=0;jmSIZE;j++temp[i][j]=memery[j];}else{forj=0;jmSIZE;j++temp[i][j]=memery[j];}}compute;printcount;}运行后界面实验结果与分析FIFO实验结果LRU实验结果OPT实验结果注意事项通过这次实验我知道了一个好的实验设计思路是十分重要的;我们不要为了实验结果而实验,有时候好的设计思路是我们做起实验来事半功倍指导教师评价教师签名:年月日。