虚拟内存页面置换算法实验报告Word文档下载推荐.docx
《虚拟内存页面置换算法实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《虚拟内存页面置换算法实验报告Word文档下载推荐.docx(14页珍藏版)》请在冰点文库上搜索。
通过已知最小物理块数、页面个数、页面访问序列、及采用置换方式可以得出页面置换得缺页次数与缺页率,及每次缺页时物理块中存储。
1。
输入得形式 ﻩ
intPageOrder[MaxNumber];
//页面序列
intPageNum,LackNum=0,BlockNum;
//页面个数,缺页次数,最小物理块数
2.输出得形式
doubleLackPageRate//缺页率
缺页个数
每次缺页时物理块中存储
程序所能达到得功能
模拟先进先出FIFO、最佳置换OPI与最近最久未使用LRU页面置换算法得工作过程。
假设内存中分配给每个进程得最小物理块数为m,在进程运行过程中要访问得页面个数为n,页面访问序列为P1, …,Pn,分别利用不同得页面置换算法调度进程得页面访问序列,给出页面访问序列得置换过程,计算每种算法缺页次数与缺页率。
测试数据,包括正确得输入及其输出结果与含有错误得输入及其输出结果。
程序中用到得所有抽象数据类型得定义、主程序得流程以及各程序模块之间得层次(调用)关系、
intPageOrder[MaxNumber];
int PageCount[MaxNumber]={0};
//计算内存内数据离下一次出现得距离
int PageNum,LackNum=0,BlockNum;
doubleLackPageRate=0;
boolfound=false;
六、实验数据及结果分析
运行截图:
图6。
1
图6。
2
图6、3
七、实验总结
这次试验,让我加深了对虚拟内存页面置换算法得理解,进一步掌握先进先出FIFO、最佳置换OPI与最近最久未使用LRU页面置换算法得实现方法、熟悉Linux需要经过大量得实验、改进与思考,在编写代码得过程中遇到了一些问题要积极面对并通过讨论上网或者问老师解决、通过这次试验我了解了虚拟内存置换算法得一些知识,就是我对于所学习得专业知识得到了更好得巩固与提升。
附录源程序清单
#include <iostream〉
usingnamespacestd;
#define MaxNumber100
voidOPI(intPageOrder[MaxNumber],intPageCount[MaxNumber],
int PageNum,intLackNum,int BlockNum,doubleLackPageRate,boolfound)
{
int module[MaxNumber];
intsum=0;
inti,j,k,m;
for(i=0;
i<
BlockNum;
i++)//将内存填满
{
module[i]=PageOrder[i];
ﻩsum++;
ﻩfor(j=0;
j<
=i;
j++)
cout<
<
module[j]〈〈" "
;
ﻩﻩcout<
endl;
}
LackNum=BlockNum;
for(i=BlockNum;
PageNum;
i++)
{
found=false;
for(j=0;
BlockNum;
j++)//遍历已存储,判断就是否缺页
ﻩ {
ﻩif(module[j]==PageOrder[i])
ﻩ {
ﻩﻩﻩfound=true;
ﻩﻩﻩ break;
}
ﻩﻩ
if(found==false)//缺页,选择替换
ﻩ {
ﻩﻩfor(j=0;
j<BlockNum;
j++)//计算内存内数据离下一次出现得距离
{
PageCount[j]=0;
for(k=i+1;
k<PageNum;
k++)
ﻩﻩ{
ﻩ if(module[j]!
=PageOrder[k])
ﻩﻩ PageCount[j]++;
ﻩelse
ﻩ break;
ﻩ}
ﻩﻩ }
ﻩ int max=PageCount[0];
ﻩ int kind=0;
ﻩfor(j=0;
j〈BlockNum;
j++)//找出最大值
if(PageCount[j]>
max)
ﻩ{
ﻩﻩﻩ max=PageCount[j];
ﻩﻩﻩﻩ kind=j;
ﻩﻩﻩ}
ﻩ }
module[kind]=PageOrder[i];
ﻩ LackNum++;
ﻩfor(m=0;
m〈3;
m++)
ﻩ cout〈<
module[m]〈〈”"
ﻩcout<
〈endl;
}
ﻩ }
LackPageRate=(LackNum*1、0)/PageNum;
cout<<"该算法缺页次数为:
"<
〈LackNum〈<
endl;
cout<
〈”该算法缺页率为:
"〈〈LackPageRate*100<
〈’%'<<endl;
}
/******************************先进先出置换算法*************************************/
voidFIFO(intPageOrder[MaxNumber],int PageCount[MaxNumber],
ﻩﻩint PageNum,int LackNum,intBlockNum,doubleLackPageRate,bool found)
{
intmodule[MaxNumber];
intsum=0;
inti,j,m;
for(i=0;
i〈BlockNum;
{
module[i]=PageOrder[i];
ﻩﻩ sum++;
PageCount[i]=3—i;
ﻩﻩ for(j=0;
=i;
j++)
cout<<module[j]〈〈""
cout〈〈endl;
}
LackNum=BlockNum;
for(i=BlockNum;
i++)
{
found=false;
ﻩ for(j=0;
j〈BlockNum;
j++)//遍历已存储,判断就是否缺页
{
ﻩﻩif(module[j]==PageOrder[i])
ﻩﻩ {
ﻩfound=true;
ﻩﻩﻩ break;
ﻩﻩ
ﻩ }
if(found==false)//缺页,选择替换
{
ﻩﻩ intmax=PageCount[0];
ﻩintkind=0;
ﻩﻩfor(j=0;
j<BlockNum;
ﻩ{
ﻩﻩif(PageCount[j]〉max)
{
ﻩﻩﻩﻩ max=PageCount[j];
ﻩﻩﻩﻩ kind=j;
ﻩﻩ }
ﻩ}
ﻩ for(intk=0;
k<BlockNum;
k++)//不就是最大值,则要+1
ﻩﻩﻩ {
ﻩﻩﻩ if(k!
=kind)
PageCount[k]++;
ﻩﻩ}
module[kind]=PageOrder[i];
PageCount[kind]=0;
//替换之后已经查询得次数改为0
ﻩﻩLackNum++;
ﻩfor(m=0;
m<
3;
m++)
ﻩﻩ cout<<
module[m]〈<"
"
ﻩ cout<<
endl;
ﻩ }
LackPageRate=(LackNum*1。
0)/PageNum;
cout<〈”该算法缺页次数为:
”<〈LackNum<<endl;
cout〈〈”该算法缺页率为:
”〈<LackPageRate*100<〈'%’〈<endl;
/******************************最近最久未使用置换算法*************************************/
voidLRU(intPageOrder[MaxNumber],int PageCount[MaxNumber],
int PageNum,intLackNum,intBlockNum,double LackPageRate,boolfound)
int module[MaxNumber];
int sum=0;
inti,j,m;
for(i=0;
i<
BlockNum;
module[i]=PageOrder[i];
ﻩsum++;
PageCount[i]=3-i;
for(j=0;
j〈=i;
j++)
cout〈<
module[j]<<
”";
cout〈<endl;
}
LackNum=BlockNum;
for(i=BlockNum;
i〈PageNum;
found=false;
for(j=0;
j〈BlockNum;
j++)//遍历已存储,判断就是否缺页
ﻩﻩﻩ if(module[j]==PageOrder[i])
ﻩﻩ {
ﻩ found=true;
PageCount[j]=0;
//查询后,更改次数
ﻩﻩﻩfor(intk=0;
k<BlockNum;
k++)
ﻩ{
ﻩﻩif(k!
=j)
PageCount[k]++;
ﻩﻩ}
ﻩbreak;
}
ﻩ
ﻩ}
if(found==false)//缺页,选择替换
ﻩ{
ﻩ intmax=PageCount[0];
intkind=0;
ﻩﻩ for(j=0;
j〈BlockNum;
j++)//找出最大值
ﻩif(PageCount[j]〉max)
{
ﻩﻩmax=PageCount[j];
ﻩﻩﻩﻩﻩkind=j;
ﻩﻩﻩ}
ﻩﻩ}
for(intk=0;
k<
BlockNum;
ﻩ {
ﻩﻩif(k!
=kind)
PageCount[k]++;
module[kind]=PageOrder[i];
PageCount[kind]=0;
//替换之后未查询得次数改为0
ﻩﻩLackNum++;
for(m=0;
m++)
ﻩcout<
module[m]<
"
"
ﻩ cout〈<endl;
LackPageRate=(LackNum*1、0)/PageNum;
cout<
〈”该算法缺页次数为:
”<<
LackNum<<endl;
cout<
〈"
该算法缺页率为:
〈〈LackPageRate*100<
〈’%'〈〈endl;
}
intmain()
int PageOrder[MaxNumber];
ﻩint PageCount[MaxNumber]={0};
//计算内存内数据离下一次出现得距离
intPageNum,LackNum=0,BlockNum;
//页面个数,缺页次数,最小物理块数
doubleLackPageRate=0;
boolfound=false;
intchioce1=0,chioce2,chioce3;
inti=0;
while(chioce1==0)
cout<〈"就是否重新输入数据;
0:
不输入,1:
重新输入:
cin>>chioce2;
if(chioce2==1)
ﻩ{
cout〈〈"请输入页面个数:
";
cin>〉 PageNum;
cout<
<"请输入最小物理块数";
ﻩcin〉〉BlockNum;
ﻩcout<〈"
请输入页面序列:
”〈<endl;
ﻩfor(i=0;
i<PageNum;
cin>〉PageOrder[i];
cout<
请选择算法:
1-FIFO,2-OPI,3—LRU:
”;
cin〉>
chioce3;
if(chioce3==1)
FIFO(PageOrder,PageCount,PageNum,LackNum,BlockNum,LackPageRate, found);
else
if(chioce3==2)
OPI(PageOrder,PageCount,PageNum,LackNum,BlockNum,LackPageRate,found);
ﻩelse
LRU(PageOrder,PageCount,PageNum,LackNum,BlockNum,LackPageRate,found);
*****************************************************************"
〈<
ﻩcout〈<"请选择继续还就是结束:
继续,1:
结束"
ﻩcin>
>
chioce1;