Clock及改进Clock置换算法实现.docx
- 文档编号:9891735
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:14
- 大小:47.71KB
Clock及改进Clock置换算法实现.docx
《Clock及改进Clock置换算法实现.docx》由会员分享,可在线阅读,更多相关《Clock及改进Clock置换算法实现.docx(14页珍藏版)》请在冰豆网上搜索。
Clock及改进Clock置换算法实现
操作系统课程设计报告
学院:
学生姓名:
__
学号:
题目:
Clock及改进Clock置换算法实现
指导教师:
一、课程设计目的
操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
●进一步巩固和复习操作系统的基础知识。
●培养学生结构化程序、模块化程序设计的方法和能力。
●提高学生调试程序的技巧和软件设计的能力。
●提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。
二、课程设计内容与要求:
模拟实现Clock及改进Clock置换算法,程序应按照Clock置换算法及改进Clock置换算法模拟实现页面的置换。
1.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。
对程序其它部分也进行必要的注释。
2.对系统进行功能模块分析、画出总流程图和各模块流程图。
3.用户界面要求使用方便、简洁明了、美观大方、格式统一。
所有功能可以反复使用,最好使用菜单。
4.通过命令行相应选项能直接进入某个相应菜单选项的功能模块。
5.所有程序需调试通过
三、算法及关键数据结构设计
(1)Clock置换算法:
当采用简单Clock算法是只需为每页设置一位访问位,再将内存中的所用页面都通过链接指针链接成一个循环队列。
当某页被访问时,其访问位被置1。
置换算法在选择一页淘汰时,只需检查页的访问位。
如果是0,就选择该页换出;若为1,则重新将他置0,暂不换出,而给该页第二次驻留内存的机会,在按照FIFO算法检查下一个页面。
当检查到队列中的最后一个页面是,若其访问位仍为1,则再返回到队首去检查第一个页面。
(2)算法流程图
(3)改进型Clock置换算法
在将一个页面换出时,如果该页已被修改过,便须将该页重新写回到磁盘上;但如果该页未被修改过,则不必将它拷回磁盘。
在改进型Clock算法中,除须考虑页面的使用情况外,还须在增加一个因素,即置换代价,这样页面换出时,既要是未使用过的页面,又要是未被修改过的页面。
把同时满足这两个条件的页面作为首选淘汰的页面。
由访问位A和修改位M可以组合成下面四种类型的页面:
1类(A=0,M=0):
表示该页最近既未被访问,又未被修改,是最佳淘汰页。
2类(A=0,M=0):
表示该页最近未被访问,但已被修改,并不是很好的淘汰页。
3类(A=1,M=0):
表示该页最近已被访问,但未被修改,该页有可能在被访问。
4类(A=1,M=1):
表示该页最近已被访问且被修改,该页可能再被访问。
,
执行过程:
①从查寻指针当前位置起扫描内存分页循环队列,选择A=0且M=0的第一个页面淘汰;若未找到,转②
②开始第二轮扫描,选择A=0且M=1的第一个页面淘汰,同时将经过的所有页面访问位置0;若不能找到,转①
四、程序代码分析
(1)Clock置换算法代码实现
voidCLOCK(intnum){
intj;
if(isInside(num)){
cout<<"命中"< for(inti=0;i cout<<"物理块"< "< } else if(count==A){ lost++; for(j=0;j if(state[j]==0){ break; } else{ state[j]=0; } j++; j=j%3; } Inside[j]=Page[num]; state[j]=1; for(inti=0;i cout<<"物理块"< "< } else{ Inside[count]=Page[num]; count++; for(inti=0;i cout<<"物理块"< "< } } (2)改进Clock置换算法实现 voidLCLOCK(intnum){ intj; if(isInside2(num)){ cout<<"命中"< for(inti=0;i cout<<"物理块"< "< } else if(count==A){ lost++; j=whichpage(); Inside[j]=Page[num]; state2[j][0]=1; for(inti=0;i cout<<"物理块"< "< } else{ Inside[count]=Page[num]; count++; for(inti=0;i cout<<"物理块"< "< } } 五.程序截图 运行截图: 六.程序代码 #include #include usingnamespacestd; #defineM2 intconstA=4;//内存中存放的页面数 intcount=0; intInside[A]; intconstPageCount=10;//总的页面数 intPage[PageCount]; intinsert=0;//先到先出置换算法fcfo中表示当内存满的时候,新进入的页号放的位置 intsuiji=0;//随机置换算法randchange当内存满的时候,新进入的页号放的位置 intstate[A];//clock置换算法中,内存中的每个页面号对应的状态 intstate2[A][M];//二维数组,第一行第一列为访问位,第一行的第二列为修改位 doublelost=0.0; //检测页号是否在内存中 boolisInside(intnum){ for(inti=0;i if(Inside[i]==Page[num]){ state[i]=1; returntrue; } } returnfalse; } //判断页面是否已经被修改 boolchange(){ if((rand()%2+1)==1){ cout<<"该页面被修改"< returntrue; } else returnfalse; } //用于改进型clock置换算法,检测页号是否在内存中并把访问位和修改位置1 boolisInside2(intnum){ for(inti=0;i if(Inside[i]==Page[num]){ if(change()){ state2[i][0]=1; state2[i][1]=1; } else{ state2[i][0]=1; } returntrue; } } returnfalse; } //用于改进型clock置换算法,判断内存中第几个需要被置换 intwhichpage(){ intj; for(j=0;j if(state2[j][0]==0&&state2[j][1]==0){ returnj; } } for(j=0;j if(state2[j][0]==0&&state2[j][1]==1){ returnj; } state2[j][0]=0; } for(j=0;j state2[j][0]=0; } returnwhichpage(); } //简单Clock置换算法 voidCLOCK(intnum){ intj; if(isInside(num)){ cout<<"命中"< for(inti=0;i cout<<"物理块"< "< } else if(count==A){ lost++; for(j=0;j if(state[j]==0){ break; } else{ state[j]=0; } j++; j=j%3; } Inside[j]=Page[num]; state[j]=1; for(inti=0;i cout<<"物理块"< "< } else{ Inside[count]=Page[num]; count++; for(inti=0;i cout<<"物理块"< "< } } //改进型clock置换算法 voidLCLOCK(intnum){ intj; if(isInside2(num)){ cout<<"命中"< for(inti=0;i cout<<"物理块"< "< } else if(count==A){ lost++; j=whichpage(); Inside[j]=Page[num]; state2[j][0]=1; for(inti=0;i cout<<"物理块"< "< } else{ Inside[count]=Page[num]; count++; for(inti=0;i cout<<"物理块"< "< } } intmain(){ charch; cout<<"默认的页号为"< for(inti=0;i Page[i]=rand()%9+1; cout< } cout< while (1){ cout<<"------------1.Clock置换算法(CLOCK)-----"< cout<<"------------2.改进型Clock置换算法--------"< cout<<"------------0.退出-----------------------"< cout<<"-------------输入进行选择----------------"< cin>>ch; switch(ch){ case'1': { lost=0; count=0; for(intm=0;m state[m]=0; } for(intj=0;j Inside[j]=0; } for(inti=0;i cout<<"读入Page["< CLOCK(i); } cout<<"\n页面访问次数"< }break; case'2': { lost=0; count=0; for(intm=0;m for(intn=0;n<2;n++) state2[m][n]=0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Clock 改进 置换 算法 实现