实验五虚拟内存页面置换算法Word格式文档下载.docx
《实验五虚拟内存页面置换算法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验五虚拟内存页面置换算法Word格式文档下载.docx(16页珍藏版)》请在冰点文库上搜索。
intTime[MaxNumber];
intSimulate[MaxNumber][MaxNumber];
intPageCount[MaxNumber];
intPageNum,LackNum,PageMin;
doubleLackPageRate;
boolfound;
2)页面置换的实现过程如下:
Ø
变量初始化;
接收用户输入最小物理块数m,页面个数n,页面序列P1,…,Pn,选择算法1-FIFO,2-OPI,3-LRU;
根据用户选择的算法进行页面的分配和置换,输出页面置换算法的模拟过程;
计算选择算法的缺页次数和缺页率;
输出选择算法的缺页次数和缺页率。
三:
概要设计
输入函数voidinput()
初始化函数voidInitial()
显示函数voidshow()
先进先出算法的函数voidFIFO()
最佳置换算法的函数voidOPI()
最近最久未使用置换算法voidLRU()
主函数voidmain()
{
input();
ints=0;
while(s!
=4)
{
cout<
<
"
请选择算法:
endl;
1:
先进先出;
2:
最佳值换算法;
3:
最近最久未使用置换算法;
4:
退出"
cin>
>
s;
switch(s)
{
case1:
FIFO();
show();
break;
case2:
OPI();
case3:
LRU();
case4:
return;
default:
cout<
输入数字不对,请重新输入:
;
}
}
}
四:
结果测试和截图以及说明
输入:
页面个数20
页面数列70120304230321201701
系统为进程分配的物理块:
3
输出结果如截图所示:
先进先出算法:
2.最佳置换算法
3.LRU算法
说明:
—1表示的是物理块中没有页面。
相邻的相同的也同时表示出来了并没有空出。
五:
源代码
#include<
iostream.h>
//usingnamespacestd;
constintMaxNumber=100;
//输入
voidinput()
cout<
请输入页面个数:
(PageNum)"
cin>
PageNum;
while(PageNum>
MaxNumber)
页面个数太大,请重新输入:
请输入页面序列:
for(inti_PageOrder=0;
i_PageOrder<
i_PageOrder++)
PageOrder[i_PageOrder];
请输入系统分配的最小页面个数:
(PageMin)"
PageMin;
while(PageMin>
//先进先出页面置换算法
voidInitial()
for(inti_Time=0;
i_Time<
i_Time++)
Time[i_Time]=PageNum;
for(inti_Simulate=0;
i_Simulate<
i_Simulate++)
for(intj_Simulate=0;
j_Simulate<
j_Simulate++)
Simulate[i_Simulate][j_Simulate]=-1;
LackNum=0;
LackPageRate=0;
found=true;
voidshow()
for(inti=0;
i<
i++)
PageOrder[i]<
:
"
for(intk=0;
k<
k++)
Simulate[i][k]<
LackPageRate=double(LackNum)/double(PageNum);
缺页数:
LackNum<
缺页率:
LackPageRate<
voidFIFO()
Initial();
inti=0;
//指示PageOrder[]的序号
intj=0;
//指示PageCount[]中要替换的序号
intk=0;
for(i=0;
PageCount[i]=PageOrder[i];
for(k=0;
=i;
Simulate[i][k]=PageCount[k];
LackNum++;
for(;
k=0;
found=false;
while(k<
PageMin&
&
(!
found))
if(PageCount[k]==PageOrder[i])
{
found=true;
break;
}
else
k++;
if(!
found)
PageCount[j]=PageOrder[i];
LackNum++;
j++;
j=j%PageMin;
voidOPI()
intnum=i+1;
//用来找刚刚换进的页面数在后面出现的位置
while(num<
PageNum)
if(PageCount[i]==PageOrder[num])
Time[i]=num;
num++;
if(num==PageNum)
j=k;
j=0;
for(k=0;
if(Time[k]>
Time[j])
j=k;
PageCount[j]=PageOrder[i];
if(PageCount[j]==PageOrder[num])
Time[j]=num;
Time[j]=num;
voidLRU()//最近最久未使用置换算法
Time[i]=0;
Time[k]++;
Time[j]=0;
//主函数
voidmain()