页面置换算法的模拟实现及命中率对比实验报告.docx
- 文档编号:18170581
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:12
- 大小:36.20KB
页面置换算法的模拟实现及命中率对比实验报告.docx
《页面置换算法的模拟实现及命中率对比实验报告.docx》由会员分享,可在线阅读,更多相关《页面置换算法的模拟实现及命中率对比实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
页面置换算法的模拟实现及命中率对比实验报告
页面置换算法的模拟实现及命中率对比实验报告
一、问题描述
课程设计目的
(1)、通过请求页式管理方式中页面置换算法的模拟设计,了解虚拟存储
术的特点,掌握请求页式存储管理中的页面置换算法。
(2)、课程设计内容
模拟实现OPT(最佳置换)、FIFO和LRU算法,并计算命中率。
(3)、课程设计要求:
a)首先用随机数生成函数产生“指令”序列,然后将指令序列变换成相应的页地址流,再计算不同算法下的命中率。
b)通过随机数产生一个指令序列,共产生400条。
其中50%的指令是顺序执行的(灵位50%就是非顺序),且25%的指令分布在前半部分地址空间,25%的指令分布在后半部分地址空间。
c)将指令地址流变换成页地址流
d)循环运行,使用户内存容量从4到40,。
计算每个内存容量下不同页面置换算法的命中率。
二、概要设计
1.程序的数据结构:
#definetotal_instruction100/*指令流长*/
#defineM100/*实际页数*/
#defineN5序的主函数:
intmain()
{
Prop[total_instruction];
Pro*page=newPro[N];
charc;
intt=0,i;
floatn=0;
Input(p);
do{
for(i=0;i page[i].time=2-i; } printf("系统产生的随机数为: "); for(inte=0;e cout< cout< i=0; cout<<"f: FIFO页面置换"< cout<<"l: LRU页面置换"< cout<<"o: OPT页面置换"< cout<<"按其它键结束"< cin>>c; if(c=='f')um,page)>=0) i++;um=p[i].num; print(page); t++; } } } cout<<"缺页次数: "< "<<1-n/total_instruction< } if(c=='l')um,page); if(t>=0) page[t].time=0; else { n++; t=Max(page); page[t].num=p[i].num; page[t].time=0; } for(intj=0;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++;page[0].time++;}*/ if(k==-1)print(page); i++; } cout<<"缺页次数: "< "<<1-n/total_instruction< } if(c=='o')um,page)>=0)i++; else { if(page[N-1].num==-1) { for(intg=0;g if(page[g].num==-1) { page[g].num=p[i].num; i++; n++; print(page); break; } } else{ inttemp=-1,cn; for(t=0;t { if(temp { temp=Compfu(page,i,t,p); cn=t; } } page[cn]=p[i]; n++; print(page); i++; } } } cout<<"缺页次数: "< "<<1-n/total_instruction< } }while(c=='f'||c=='l'||c=='o'); return0; } 三、详细设计 程序代码如下: #include<> #include #include<> #include<> usingnamespacestd; #definetotal_instruction100/*指令流长*/ #defineM100/*实际页数*/ #defineN5um=a[i]/10; p[i].time=0; } } voidprint(Pro*page1)um); um<<""; cout< um)returni; return-1; } intMax(Pro*page1) { Pro*page=newPro[N]; page=page1; inte=page[0].time,i=0; while(i i++; } for(i=0;i return-1; } intCompfu(Pro*page1,inti,intt,Prop[M]) { Pro*page=newPro[N]; page=page1; intcount=0; for(intj=i;j { if(page[t].num==p[j].num)break; elsecount++; } returncount; } intmain() { Prop[total_instruction]; Pro*page=newPro[N]; charc; intt=0,i; floatn=0; Input(p); do{ for(i=0;i page[i].time=2-i; } printf("系统产生的随机数为: "); for(inte=0;e cout< cout< i=0; cout<<"f: FIFO页面置换"< cout<<"l: LRU页面置换"< cout<<"o: OPT页面置换"< cout<<"按其它键结束"< cin>>c; if(c=='f')um,page)>=0) i++;um=p[i].num; print(page); t++; } } } cout<<"缺页次数: "< "<<1-n/total_instruction< } if(c=='l')um,page); if(t>=0) page[t].time=0; else { n++; t=Max(page); page[t].num=p[i].num; page[t].time=0; } for(intj=0;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++;page[0].time++;}*/ if(k==-1)print(page); i++; } cout<<"缺页次数: "< "<<1-n/total_instruction< } if(c=='o')um,page)>=0)i++; else { if(page[N-1].num==-1) { for(intg=0;g if(page[g].num==-1) { page[g].num=p[i].num; i++; n++; print(page); break; } } else{ inttemp=-1,cn; for(t=0;t { if(temp { temp=Compfu(page,i,t,p); cn=t; } } page[cn]=p[i]; n++; print(page); i++; } } } cout<<"缺页次数: "< "<<1-n/total_instruction< } }while(c=='f'||c=='l'||c=='o'); return0; } 四、调试与分析 程序的主界面: 这里测试用的数据是M=40,N=5,三种算法置换结果如以下的图: FIFO算法: LRU算法: OPT算法: 多运行几次,产生不同的随机数组,查看对比结果。 在某一次实验中,可能FIFO算法的命中率比LRU 算法要高,但经过多组测试数据及总体的结果表明: LRU的平均性能比FIFO 的平均性能好。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 页面 置换 算法 模拟 实现 命中率 对比 实验 报告