页面置换算法的模拟实现及命中率对比实验报告Word文档下载推荐.docx
- 文档编号:3661504
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:16
- 大小:37.07KB
页面置换算法的模拟实现及命中率对比实验报告Word文档下载推荐.docx
《页面置换算法的模拟实现及命中率对比实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《页面置换算法的模拟实现及命中率对比实验报告Word文档下载推荐.docx(16页珍藏版)》请在冰点文库上搜索。
structPro
{
intnum,time;
};
inta[total_instruction];
intpage[N];
2.程序的主函数:
intmain()
Prop[total_instruction];
Pro*page=newPro[N];
charc;
intt=0,i;
floatn=0;
Input(p);
do{
for(i=0;
i<
N;
i++)//初试化页面基本情况
{
page[i].num=-1;
page[i].time=2-i;
}
printf("
系统产生的随机数为:
"
);
for(inte=0;
e<
M;
e++)
cout<
<
p[e].num<
"
;
endl;
i=0;
f:
FIFO页面置换"
l:
LRU页面置换"
o:
OPT页面置换"
按其它键结束"
cin>
>
c;
if(c=='
f'
)//FIFO页面置换
n=0;
页面置换情况:
while(i<
total_instruction)
if(Search(p[i].num,page)>
=0)
i++;
//找到相同的页面
else
if(t==N)t=0;
n++;
//
page[t].num=p[i].num;
print(page);
t++;
缺页次数:
n<
命中率:
1-n/total_instruction<
l'
)//LRU页面置换
while(i<
total_instruction)
intk;
k=t=Search(p[i].num,page);
if(t>
page[t].time=0;
t=Max(page);
for(intj=0;
j<
j++)
if(j!
=t)page[j].time++;
/*if(t==0){page[t+1].time++;
page[t+2].time++;
}
if(t==1){page[2].time++;
page[0].time++;
if(t==2){page[1].time++;
}*/
if(k==-1)print(page);
o'
)//OPT页面置换
=0)i++;
if(page[N-1].num==-1)
for(intg=0;
g<
g++)
if(page[g].num==-1)
page[g].num=p[i].num;
break;
else{
inttemp=-1,cn;
for(t=0;
t<
t++)
if(temp<
Compfu(page,i,t,p))
temp=Compfu(page,i,t,p);
cn=t;
page[cn]=p[i];
}while(c=='
||c=='
return0;
三、详细设计
程序代码如下:
#include<
stdlib.h>
iostream>
time.h>
stdio.h>
usingnamespacestd;
#definetotal_instruction100/*指令流长*/
voidInput(Prop[total_instruction])
intm,i,m1,m2;
srand((unsignedint)time(NULL));
m=rand()%400;
//
for(i=0;
total_instruction;
)/*产生指令队列*/
if(m<
0||m>
399)
Wheni==%d,Error,m==%d\n"
i,m);
exit(0);
a[i]=m;
/*任选一指令访问点m*/
a[i+1]=a[i]+1;
a[i+2]=a[i]+2;
/*顺序执行两条指令*/
intm1=rand()%m;
/*执行前地址指令m1*/
a[i+3]=m1;
a[i+4]=m1+1;
a[i+5]=m1+2;
/*顺序执行两条指令*/
//s=(158-a[i+5])*rand()/32767/32767/2+a[i+5]+2;
m2=rand()%(157-m1)+m1+3;
a[i+6]=m2;
if((m2+2)>
159)
a[i+7]=m2+1;
i+=8;
a[i+8]=m2+2;
i=i+9;
m=rand()%m2;
for(i=0;
i++)/*将指令序列变换成页地址流*/
p[i].num=a[i]/10;
p[i].time=0;
voidprint(Pro*page1)//打印当前的页面
page=page1;
for(inti=0;
i++)
%-4d"
page[i].num);
//cout<
page[i].num<
//free(page);
intSearch(inte,Pro*page1)
i++)if(e==page[i].num)returni;
return-1;
intMax(Pro*page1)
inte=page[0].time,i=0;
N)//找出离现在时间最长的页面
if(e<
page[i].time)e=page[i].time;
i++)if(e==page[i].time)returni;
intCompfu(Pro*page1,inti,intt,Prop[M])
intcount=0;
for(intj=i;
if(page[t].num==p[j].num)break;
elsecount++;
returncount;
endl”
四、调试与分析
程序的主界面:
这里测试用的数据是M=40,N=5,三种算法置换结果如以下的图:
FIFO算法:
LRU算法:
OPT算法:
多运行几次,产生不同的随机数组,查看对比结果。
在某一次实验中,可能FIFO算法的命中率比LRU
算法要高,但经过多组测试数据及总体的结果表明:
LRU的平均性能比FIFO
的平均性能好。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 页面 置换 算法 模拟 实现 命中率 对比 实验 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)