整理页面置换算法OPT+FIFO+LRU+clock.docx

上传人:b****5 文档编号:6766825 上传时间:2023-01-10 格式:DOCX 页数:12 大小:17.46KB
下载 相关 举报
整理页面置换算法OPT+FIFO+LRU+clock.docx_第1页
第1页 / 共12页
整理页面置换算法OPT+FIFO+LRU+clock.docx_第2页
第2页 / 共12页
整理页面置换算法OPT+FIFO+LRU+clock.docx_第3页
第3页 / 共12页
整理页面置换算法OPT+FIFO+LRU+clock.docx_第4页
第4页 / 共12页
整理页面置换算法OPT+FIFO+LRU+clock.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

整理页面置换算法OPT+FIFO+LRU+clock.docx

《整理页面置换算法OPT+FIFO+LRU+clock.docx》由会员分享,可在线阅读,更多相关《整理页面置换算法OPT+FIFO+LRU+clock.docx(12页珍藏版)》请在冰豆网上搜索。

整理页面置换算法OPT+FIFO+LRU+clock.docx

整理页面置换算法OPT+FIFO+LRU+clock

页面置换算法OPT+FIFO+LRU+clock

编辑整理:

 

尊敬的读者朋友们:

这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(页面置换算法OPT+FIFO+LRU+clock)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为页面置换算法OPT+FIFO+LRU+clock的全部内容。

#include

#include〈fstream〉

usingnamespacestd;

#defineBlockSize10

#definePageSize100

intpage[PageSize];//页面数组存放页面

intblock[BlockSize];//物理块数组

intresult[PageSize][BlockSize];//存放页面和物理块二维数组

intpSize=0;//用户使用页面数

intbSize=0;//用户使用物理块数

intblockFlag[BlockSize];//用于LRU与最佳置换算法中,辅助判断该换出的页面

intnoPageCount=0;//缺页次数

//输入数据

voidinputData()

{

cout〈〈endl〈〈"请输入物理块数(1<=bSize<=”<

cin>>bSize;

cout<〈"请输入页面数(1〈=pSize<="〈

cin〉〉pSize;

while(bSize<=0||bSize〉BlockSize||pSize<=0||pSize〉PageSize){//判断用户输入是否在范围内

cout<〈"输入范围错误,请重新输入:

”〈

cout〈〈”请输入物理块数(1〈=F〈="〈

cin>>bSize;

cout<

cin>>pSize;

cout〈〈”请输入页面走向"〈

for(inti=0;i〈pSize;i++)

cin〉>page[i];

}

//初始化page数组

voidinitPage()

for(inti=0;i〈PageSize;i++)

page[i]=-1;

}

//初始化block与result数组

voidinitBlockResult()

inti=0;

for(i=0;i

block[i]=-1;

for(i=0;i〈PageSize;i++)

for(intj=0;j〈BlockSize;j++)

result[i][j]=-1;

}

//查找物理块中是否存在要调用的页面

intExist(inti)

{

for(intj=0;j〈bSize;j++)

if(block[j]==i)

returnj;

return—1;

//显示结果

voiddisplay(intnoPageCount)

{

for(inti=0;i〈pSize;i++)

cout〈〈”"<

for(intj=0;j〈bSize;j++)

{

if(result[i][j]==—1)break;

elsecout〈〈'[’〈

}

cout〈〈endl;

}

cout〈〈"____________________________________"〈

cout〈

"<〈noPageCount<

cout<<”缺页率:

”<<((double)noPageCount/pSize)*100<<’%’〈〈endl;

cout<<"===================================="<

//最佳置换算法OPT

voidOPT()

{

inti=0,j=0;

intposition=0,noPageCount=0;

intpageFlag=0,resultFlag=0;//页面标记(下标)指向下一个页面,结果标记表示结果的行,即result数组的行标

for(i=0;i〈BlockSize;i++)

blockFlag[i]=0;

while(pageFlag

{

if(Exist(page[pageFlag])!

=—1)//判断页面是否已经存在

resultFlag++;

else

if(position

{//若有则将页面放入空闲块

block[position]=page[pageFlag];

position++;

noPageCount++;

for(i=0;i〈position;i++)

result[resultFlag][i]=block[i];

resultFlag++;

else{

for(i=0;i

for(j=pageFlag+1;j

if(block[i]==page[j])

blockFlag[i]=j;

break;

}

if(j==pSize)blockFlag[i]=999;

}

intoptPos=0,max=blockFlag[0];

for(inti=0;i

if(max

{

max=blockFlag[i];

optPos=i;

}

block[optPos]=page[pageFlag];

noPageCount++;

for(i=0;i〈bSize;i++)

result[resultFlag][i]=block[i];

resultFlag++;

pageFlag++;

cout〈〈endl<<"最佳置换算法:

"<〈endl;

display(noPageCount);

return;

}

//先进先出页面置换算法FIFO

voidFIFO()

{

intblockFlag=0,pageFlag=0,resultFlag=0;//物理块标记,确定该换出的物理块下标

inti=0,j=0,noPageCount=0;

intposition=0;//指示物理块,查找有无空闲

while(pageFlag〈pSize)

{

if(Exist(page[pageFlag])!

=-1)

resultFlag++;

else

if(position

block[position]=page[pageFlag];

position++;

noPageCount++;

for(i=0;i<=position;i++)

result[resultFlag][i]=block[i];

resultFlag++;

}

else

block[blockFlag]=page[pageFlag];//blockFlag指示要换出的页面

noPageCount++;

for(i=0;i〈bSize;i++)

result[resultFlag][i]=block[i];

resultFlag++;

blockFlag++;

blockFlag=blockFlag%bSize;

pageFlag++;

}

cout〈〈endl〈<”先进先出页面置换算法FIFO:

”<〈endl;

display(noPageCount);

return;

}

//最近最久未用算法LRU

voidLRU()

{

inti=0,noPageCount=0;

intpageFlag=0,resultFlag=0,position=0;

for(i=0;i〈BlockSize;i++)//初始化时间记录数组

blockFlag[i]=0;

while(pageFlag

{

if(Exist(page[pageFlag])!

=-1)

{//判断页面是否已经在主存中

resultFlag++;

blockFlag[Exist(page[pageFlag])]=0;//若在则将时间记录数组对应位置为0

else

if(position〈bSize)

block[position]=page[pageFlag];

blockFlag[position]=0;

position++;

noPageCount++;

for(i=0;i〈=position;i++)

result[resultFlag][i]=block[i];

resultFlag++;

else

{

intlast=0,min=blockFlag[0];

for(inti=0;i〈bSize;i++)

if(min

{

min=blockFlag[i];

last=i;

}

block[last]=page[pageFlag];//置换最久未用页面

blockFlag[last]=0;

noPageCount++;

for(i=0;i

result[resultFlag][i]=block[i];

resultFlag++;

}

}

for(i=0;i

blockFlag[i]++;

pageFlag++;

}

cout<〈endl<<"最近最久未用算法LRU:

”<〈endl;

display(noPageCount);

return;

//时钟(clock)置换算法

voidclock()

{

inti=0,position=0,noPageCount=0;

boolboolBlockFlag[BlockSize];

intflag=0;//访问位循环标记

intpageFlag=0,resultFlag=0;

while(pageFlag

if(Exist(page[pageFlag])!

=-1)

{

resultFlag++;

boolBlockFlag[Exist(page[pageFlag])]=true;

else

{

if(position

block[position]=page[pageFlag];

noPageCount++;

boolBlockFlag[position]=true;

position++;

for(i=0;i〈position;i++)

result[resultFlag][i]=block[i];

resultFlag++;

else

while(true)

{//无限循环,找出访问位为false的页面

if(boolBlockFlag[flag]==false)break;

boolBlockFlag[flag]=false;//若为true,置为false

flag++;

flag=flag%bSize;

}

block[flag]=page[pageFlag];

boolBlockFlag[flag]=true;

flag++;

flag=flag%bSize;

noPageCount++;

for(i=0;i

result[resultFlag][i]=block[i];

resultFlag++;

}

}

pageFlag++;

cout<

”〈

display(noPageCount);

return;

}

intmain()

{

initPage();

intfunc;

while(func!

=5)

cout〈<”请选择所需要的功能:

”<

cout<〈"0。

输入数据”〈

cout〈<"1。

最佳(optimal)置换算法"〈

cout<〈"2。

先进先出(FIFO)置换算法"<

cout<<”3.最近最久未用(LRU)置换算法"〈

cout<<"4。

时钟(clock)置换算法"<〈endl;

cout〈〈”5.退出”<〈endl;

switch(func)

{

case0:

inputData();

break;

case1:

initBlockResult();

OPT();

break;

case2:

initBlockResult();

FIFO();

break;

case3:

initBlockResult();

LRU();

break;

case4:

initBlockResult();

clock();

break;

case5:

break;

cout〈〈"请选择功能:

";

cin>〉func;

system("cls”);

}

return0;

}

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

当前位置:首页 > PPT模板 > 其它模板

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

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