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

上传人:b****2 文档编号:3398703 上传时间:2023-05-01 格式:DOCX 页数:15 大小:81.15KB
下载 相关 举报
Clock及改进Clock置换算法实现docWord格式.docx_第1页
第1页 / 共15页
Clock及改进Clock置换算法实现docWord格式.docx_第2页
第2页 / 共15页
Clock及改进Clock置换算法实现docWord格式.docx_第3页
第3页 / 共15页
Clock及改进Clock置换算法实现docWord格式.docx_第4页
第4页 / 共15页
Clock及改进Clock置换算法实现docWord格式.docx_第5页
第5页 / 共15页
Clock及改进Clock置换算法实现docWord格式.docx_第6页
第6页 / 共15页
Clock及改进Clock置换算法实现docWord格式.docx_第7页
第7页 / 共15页
Clock及改进Clock置换算法实现docWord格式.docx_第8页
第8页 / 共15页
Clock及改进Clock置换算法实现docWord格式.docx_第9页
第9页 / 共15页
Clock及改进Clock置换算法实现docWord格式.docx_第10页
第10页 / 共15页
Clock及改进Clock置换算法实现docWord格式.docx_第11页
第11页 / 共15页
Clock及改进Clock置换算法实现docWord格式.docx_第12页
第12页 / 共15页
Clock及改进Clock置换算法实现docWord格式.docx_第13页
第13页 / 共15页
Clock及改进Clock置换算法实现docWord格式.docx_第14页
第14页 / 共15页
Clock及改进Clock置换算法实现docWord格式.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

当检查到队列中的最后一个页面是,若其访问位仍为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<

<

"

命中"

endl;

for(inti=0;

i<

A;

i++)

cout<

物理块"

i<

#中内容:

Inside[i]<

}

else

if(count==A){

lost++;

for(j=0;

j<

A;

){

if(state[j]==0){

break;

}

else{

state[j]=0;

j++;

j=j%3;

}

Inside[j]=Page[num];

state[j]=1;

for(inti=0;

}

else{

Inside[count]=Page[num];

count++;

}

(2)改进Clock置换算法实现

voidLCLOCK(intnum){

if(isInside2(num)){

cout<

j=whichpage();

state2[j][0]=1;

cout<

五.程序截图

运行截图:

六.程序代码

#include<

iostream>

stdlib.h>

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){

该页面被修改"

returntrue;

returnfalse;

//用于改进型clock置换算法,检测页号是否在内存中并把访问位和修改位置1

boolisInside2(intnum){

if(change()){

state2[i][0]=1;

state2[i][1]=1;

else{

//用于改进型clock置换算法,判断内存中第几个需要被置换

intwhichpage(){

for(j=0;

j++){

if(state2[j][0]==0&

&

state2[j][1]==0){

returnj;

j++){

state2[j][1]==1){

state2[j][0]=0;

returnwhichpage();

//简单Clock置换算法

//改进型clock置换算法

intmain(){

charch;

默认的页号为"

PageCount;

Page[i]=rand()%9+1;

Page[i]<

"

;

while

(1){

------------1.Clock置换算法(CLOCK)-----"

------------2.改进型Clock置换算法--------"

------------0.退出-----------------------"

-------------输入进行选择----------------"

cin>

>

ch;

switch(ch){

case'

1'

:

{

lost=0;

count=0;

for(intm=0;

m<

m++){

state[m]=0;

for(intj=0;

j++){

Inside[j]=0;

for(inti=0;

读入Page["

]="

CLOCK(i);

\n页面访问次数"

PageCount<

\n缺页中断次数"

lost<

\n缺页率"

lost/(PageCount)<

\n"

}break;

2'

for(intn=0;

n<

2;

n++)

state2[m][n]=0;

for(intj=0;

Inside[j]=0;

for(inti=0;

LCLOCK(i);

0'

exit(0);

}break;

return0;

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

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2