操作系统-七次实验报告-常用页面置换算法模拟实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

操作系统课程第七次实验报告姓名学号系计算机任课教师贺辉指导教师贺辉评阅教师贺辉实验地点综合楼B102实验时间2012-9-26实验课表现出勤和个人表现Q1(15+15(组长评分)=30分)得分:实验总分(Q1+Q2+Q3+Q4)实验完成情况Q2(45分(组长与教师评分的加权平均))得分:实验编号与实验名称:实验七、常用页面置换算法模拟实验实验目的:通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。实验内容及要求(详见实验讲义与实验指导书):要求:1)要求用你熟悉的程序设计语言编写和调试一个页面置换模拟程序;要求在主函数中测试。2)实验报告中必须包括:设计思想、数据定义(包括详细说明)、处理流程(详细算法描述和算法流程图)、源代码、运行结果、体会等部分。3)必须模拟本实验内容中提到的算法中的至少2种页面置换算法。4)比较不同页面置换算法的效率内容:编写一个程序,使用以下页面置换算法中的某2种分别模拟一个分页系统,并统计同一个页面访问序列情况下不同页面置换算法引发的缺页中断次数。1、第二次机会算法(SecondChance)2、最近最少使用算法(LeastRecentlyUsed,LRU)3、最不常用算法(NotFrequentlyUsed,NFU)4、最近未使用算法(NotRecentlyUsed,NRU)5、时钟页面置换算法6、老化算法(aging)页框的数量固定为4,虚拟页面数为8。实验输入为访问页面序列,比如0,1,3,2,7,1实验用到的软件(:)DevC++,Visio实验内容及关键步骤(代码)Q3(15分)得分:流程图:输入页面访问序列取访问的页号查页表是否缺页?是置缺页标志flag为’*’按算法不同淘汰一页面调入所访问的页面否FIFO算法流程图LRU算法流程图:函数关系解释图:Main()FIFO()LRUPRINT()11221EXIT()designBy()0显示内存页框每次置换结果用FIFO算法实现用LRU算法实现退出作者信息显示主函数,入口实现结果:图1图2代码:#includestdio.h#includestdlib.h#defineMEMORY_SIZE4/*物理块数*/#definePROESS_SIZE8/*页面号引用串个数*/#includestdio.h#includestdlib.h/*全局变量*/intmSIZE=4;intpSIZE=8;staticintmemery[4]={0};/*物理块中的页号*/staticintpage[8]={0};/*页面号引用串*/staticinttemp[8][4]={0};/*辅助数组*//*置换算法函数*/voidFIFO();voidLRU();voidOPT();voiddesignBy();/*辅助函数*/voidprint(unsignedintt);/*主函数*/intmain(){inti,k,code;designBy();system(color0A);puts(请依次输入页面号(8个):);for(i=0;ipSIZE;i++)scanf(%1d,&page[i]);system(cls);system(color0E);do{puts(输入的页面号引用串为:);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(%d\n,page[i]);elseprintf(%d,page[i]);}}printf(***********************\n);printf(*请选择页面置换算法:\t\t\t*\n);printf(*-----------------------------------------*\n);printf(*1.先进先出(FIFO)2.最近最久未使用(LRU)*\n);printf(*3.退出*\n);printf(***********************\n);printf(请选择操作:[]\b\b);scanf(%d,&code);switch(code){case1:FIFO();break;case2:LRU();break;case3:system(cls);system(color0A);exit(0);default:printf(输入错误,请重新输入:);}printf(按任意键重新选择置换算法:);getch();system(cls);}while(code!=3);getch();}voidprint(unsignedintt){inti,j,k,l;intflag;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(%d\n,page[i]);elseprintf(%d,page[i]);}for(j=0;jmSIZE;j++){for(i=20*k;(imSIZE+20*k)&&(ipSIZE);i++){if(i=j)printf(|%d|,temp[i][j]);elseprintf(||);}for(i=mSIZE+20*k;(ipSIZE)&&(i20*(k+1));i++){for(flag=0,l=0;lmSIZE;l++)if(temp[i][l]==temp[i-1][l])flag++;if(flag==mSIZE)/*页面在物理块中*/printf();elseprintf(|%d|,temp[i][j]);}/*每行显示20个*/if(i%20==0)continue;printf(\n);}}printf(----------------------------------------\n);printf(缺页次数:%d\t\t,t+mSIZE);printf(缺页率:%d/%d\n,t+mSIZE,pSIZE);printf(置换次数:%d\t\t,t);printf(访问命中率:%d%%\n,(pSIZE-(t+mSIZE))*100/pSIZE);printf(----------------------------------------\n);}/*先进先出页面置换算法*/voidFIFO(){intmemery[10]={0};inttime[10]={0};/*记录进入物理块的时间*/inti,j,k,m;intmax=0;/*记录换出页*/intcount=0;/*记录置换次数*//*前mSIZE个数直接放入*/for(i=0;imSIZE;i++){memery[i]=page[i];time[i]=i;for(j=0;jmSIZE;j++)temp[i][j]=memery[j];}for(i=mSIZE;ipSIZE;i++){/*判断新页面号是否在物理块中*/for(j=0,k=0;jmSIZE;j++){if(memery[j]!=page[i])k++;}if(k==mSIZE)/*如果不在物理块中*/{count++;/*计算换出页*/max=time[0]time[1]?0:1;for(m=2;mmSIZE;m++)if(time[m]time[max])max=m;memery[max]=page[i];time[max]=i;/*记录该页进入物理块的时间*/for(j=0;jmSIZE;j++)temp[i][j]=memery[j];}else{for(j=0;jmSIZE;j++)temp[i][j]=memery[j];}}print(count);}/*最近最久未使用置换算法*/voidLRU(){intmemery[10]={0};intflag[10]={0};/*记录页面的访问时间*/inti,j,k,m;intmax=0;/*记录换出页*/intcount=0;/*记录置换次数*//*前mSIZE个数直接放入*/for(i=0;imSIZE;i++){memery[i]=page[i];flag[i]=i;for(j=0;jmSIZE;j++)temp[i][j]=memery[j];}for(i=mSIZE;ipSIZE;i++){/*判断新页面号是否在物理块中*/for(j=0,k=0;jmSIZE;j++){if(memery[j]!=page[i])k++;elseflag[j]=i;/*刷新该页的访问时间*/}if(k==mSIZE)/*如果不在物理块中*/{count++;/*计算换出页*/max=flag[0]flag[1]?0:1;for(m=2;mmSIZE;m++)if(flag[m]flag[max])max=m;memery[max]=page[i];flag[max]=i;/*记录该页的访问时间*/for(j=0;jmSIZE;j++)temp[i][j]=memery[j];}else{for(j=0;jmSIZE;j++)temp[i][j]=memery[j];}}//compute();print(count);}/*显示设计者信息*/voiddesignBy(){printf(┏━━━━━━━━━━━━━━━━━━━━━━━━━┓\n);printf(┃㊣实验七:页面置换算法㊣┃\n);printf(┃学号:1001010042┃\n);printf(┃姓名:黄浩全Dev-C++4.9.9.0┃\n);printf(┣━━━━━━━━━━━━━━━━━━━━━━━━━┫\n);}实验过程中遇到的问题解决办法与实验体会Q4(需手写,10分)得分:1、在FIFO算法可以很容易用数组实现,而LRU算法可以用数组实现,不过用结构体会更明显简单。结构体成员变量可以记录页号进入的时间,和最近使用的记录。相对比数组更容易理解和实现。2:首先,FIFO(先进先出)算法和LRU(最近未使用算法)两者之间,FIFO算法明显会比LRU容易理解,而且比LRU算法较容易实现,但在性能方面,LRU的确在优化方面做的比较理想。再且在考虑页框和页表号之间的问题用代码可以容易模拟,但是真是在物理内存块中是如何实现,那确实是很难以理解,需要真正理解到内存内部的知识才知道这两个算法是怎么实现的。评阅教师特殊评语:评阅教师:日期:

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功