实验三页面置换算法实验.docx

上传人:b****3 文档编号:27515208 上传时间:2023-07-02 格式:DOCX 页数:14 大小:70.06KB
下载 相关 举报
实验三页面置换算法实验.docx_第1页
第1页 / 共14页
实验三页面置换算法实验.docx_第2页
第2页 / 共14页
实验三页面置换算法实验.docx_第3页
第3页 / 共14页
实验三页面置换算法实验.docx_第4页
第4页 / 共14页
实验三页面置换算法实验.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

实验三页面置换算法实验.docx

《实验三页面置换算法实验.docx》由会员分享,可在线阅读,更多相关《实验三页面置换算法实验.docx(14页珍藏版)》请在冰豆网上搜索。

实验三页面置换算法实验.docx

实验三页面置换算法实验

《操作系统原理》

实验报告

 

实验三页面置换算法实验

 

专业:

计算机科学与技术

学号:

*********

姓名:

***

实验日期:

2010-5-22

一、实验目的

通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。

二、实验要求

设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。

1.最佳淘汰算法(OPT)

2.先进先出的算法(FIFO)

3.最近最久未使用算法(LRU)

三、实验方法内容

1.算法设计思路

1.假设分给一作业的内存块数为4,每条指令占一个存储单元,每个页面中可存放10条指令;

2.设计一个程序,模拟一作业的执行过程。

设该作业共有160条指令,即它的地址空间为16页,最初作业的所有页面都还未调入内存。

在模拟过程中,如果所访问的指令已经在内存,则显示其物理地址,并转下一条指令。

如果所访问的指令尚未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。

如果4个内存块中均已装入该作业的虚页面,则需进行页面置换;在所有160条指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。

3.作业中指令的访问次序要求按下述原则生成:

具体的实施办法是:

(1)在[0,159]之间随机选取一条起始执行指令,其序号为m;

(2)顺序执行两条指令,即序号为m+1、m+2的指令;

(3)通过随机数,跳转到前地址部分[0,m-1]中的某条指令处,其序号为m1;

(4)顺序执行两条指令,即序号为m1+1,m1+2的指令;

(5)通过随机数,跳转到后地址部分[m1+3,159]中的某条指令处,其序号为m2;

(6)顺序执行两条指令,即序号为m2+1,m2+2的指令;若m2+2>159只执行一条指令;

(7)重复“跳转到前地址部分、顺序执行、跳转到后地址部分、顺序执行”的过程,直至执行完全部160条指令

2.算法流程图

3.算法中用到的数据结构

4.主要的常量变量

5.主要模块

四、实验代码

#include

#include

#include

#include

#definetotal_instruction200/*指令流长*/

#defineM16/*实际页数*/

#defineN4//可用页面数

structPro

{intnum,time;

};

inta[total_instruction];

intpage[N];

voidInput(Prop[total_instruction])

{

intm,i,m1,m2;

srand((unsignedint)time(NULL));

m=rand()%160;//

for(i=0;i

{

if(m<0||m>159)

{

printf("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;

}

else

{

a[i+7]=m2+1;

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)//打印当前的页面

{

Pro*page=newPro[N];

page=page1;

for(inti=0;i

cout<

cout<

}

intSearch(inte,Pro*page1)

{

Pro*page=newPro[N];

page=page1;

for(inti=0;i

return-1;

}

intMax(Pro*page1)

{

Pro*page=newPro[N];

page=page1;

inte=page[0].time,i=0;

while(i

{

if(e

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;

floatn=0;

Input(p);

do{

for(inti=0;i

{

page[i].num=0;

page[i].time=2-i;

}

i=0;

cout<<"f:

FIFO页面置换"<

cout<<"l:

LRU页面置换"<

cout<<"o:

OPT页面置换"<

cout<<"按其它键结束"<

cin>>c;

if(c=='f')//FIFO页面置换

{

n=0;

cout<<"页面置换情况:

"<

while(i

{

if(Search(p[i].num,page)>=0)

i++;//找到相同的页面

else

{

if(t==N)t=0;

else

{

n++;//

page[t].num=p[i].num;

print(page);

t++;

}

}

}

cout<<"缺页次数:

"<

"<

}

if(c=='l')//LRU页面置换

{

n=0;

cout<<"页面置换情况:

"<

while(i

{

intk;

k=t=Search(p[i].num,page);

if(t>=0)

page[t].time=0;

else

{

n++;

t=Max(page);

page[t].num=p[i].num;

page[t].time=0;

}

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<<"缺页次数:

"<

"<

}

if(c=='o')//OPT页面置换

{

n=0;

while(i

{

if(Search(p[i].num,page)>=0)i++;

else

{

inttemp=0,cn;

for(t=0;t

{

if(temp

{

temp=Compfu(page,i,t,p);

cn=t;

}

}

page[cn]=p[i];

n++;

print(page);

i++;

}

}

cout<<"缺页次数:

"<

"<

}

}while(c=='f'||c=='l'||c=='o');

return0;

}

五、实验结果

1.执行结果

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

当前位置:首页 > 高等教育 > 院校资料

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

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