Clock 及改进 Clock置换算法实现.docx

上传人:b****6 文档编号:6865291 上传时间:2023-01-11 格式:DOCX 页数:12 大小:47.75KB
下载 相关 举报
Clock 及改进 Clock置换算法实现.docx_第1页
第1页 / 共12页
Clock 及改进 Clock置换算法实现.docx_第2页
第2页 / 共12页
Clock 及改进 Clock置换算法实现.docx_第3页
第3页 / 共12页
Clock 及改进 Clock置换算法实现.docx_第4页
第4页 / 共12页
Clock 及改进 Clock置换算法实现.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Clock 及改进 Clock置换算法实现.docx

《Clock 及改进 Clock置换算法实现.docx》由会员分享,可在线阅读,更多相关《Clock 及改进 Clock置换算法实现.docx(12页珍藏版)》请在冰豆网上搜索。

Clock 及改进 Clock置换算法实现.docx

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;

}

for(intj=0;j

Inside[j]=0;

}

for(inti=0;i

cout<<"读入Page["<

LCLOCK(i);

}

cout<<"\n页面访问次数"<

}break;

case'0':

{

exit(0);

}break;

}

}

return0;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1