实验五页面调度算法模拟实验报告Word文档下载推荐.docx
《实验五页面调度算法模拟实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实验五页面调度算法模拟实验报告Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
附录一最佳置换算法(Optimal)9..
附录二先进先出(FIFO)页面置换算法1..4
附录三LRU置换算法1...8
、实验题目
、实验学时
2学时
三、指导老师
四、实验日期
2018年12月10日星期一
五、实验目的
(1)熟悉操作系统页面调度算法
(2)编写程序模拟先进先出、LRU等页面调度算法,体会页面调度算法原理
六、实验原理
6.1页面的含义
分页存储管理将一个进程的逻辑地址空间分成若干大小相等的片,称为页面或页。
6.2页面置换算法的含义
在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。
但应将哪个页面调出,须根据一定的算法来确定。
通常,把选择换出页面的算法称为页面置换算法(Page_ReplacementAlgorithms)。
6.3置换算法
一个好的页面置换算法,应具有较低的页面更换频率。
从理论上讲,应将那些以后不再会访问的页面换出,或将那些在较长时间内不会再访问的页面调出。
6.3.1最佳置换算法(Optimal)
它是由Belady于1966年提出的一种理论上的算法。
其所选择的被淘汰页面,将是以后永不使用的或许是在最长(未来)时间内不再被访问的页面。
采用最佳置换算法,通常可保证获得最低的缺页率。
但由于人目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是
无法实现的,便可以利用此算法来评价其它算法。
632先进先出(FIFO)页面置换算法
这是最早出现的置换算法。
该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
该算法实现简单只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。
633LRU置换算法
LRU置换算法是选择最近最久未使用的页面予以淘汰。
七、实验步骤及结果
7.1验证最佳置换算法
7.1.1实验截图
7.1.2实验分析
in
7
2
1
4
8
b1
b2
b3
b4
out
7.2验证先进先出(FIFO)页面置换算法
7.2.1实验截图
■匸:
'
Weriraler\D«
lrtopV5:
科:
*1三\计算叽撓柞報\宪鲨八实暑代码\DEbug\FIfO.e^
khoFIFO
List:
103380812056
thelost
FIFO:
newbuf=l
in<
-一1
interrupt
pewbuf=1
—0
interrnpt
3
—3
iRterrupt
successfully
-一8
一8
—1
newbuf=2
S
—2
changel—>
Qut
hewbuf=2
5
一-5
change0—>
6
—6
change3—>
our
intemipt.=4
rhange^3
Pressany
key1
tocontinue.
7.2.2实验分析
bl
7.3验证LRU置换算法
7.3.1实验截图
CAUsers^Adminkt诽科大三\计算fl提作系瓠莫煤八垂躺代码\Debug\LRU.Radom心电"
TheRaiitlutuLisi:
96877:
37
12670
thelostinLRU;
newmf=9
-
9
]nterrlipt
newbuf=96
1n<
—
newbuf=9SB
—
npwbtif=96呂
7in<
interrlipt
newbuf=368
change9—>
newbuf=318
7m<
-1
change6—>
newbuf=312
_,
-2
change8—>
newbuf=612
-j
-6
cut
nettbuf-602
-0
change1--/out
]nterrtipt=4-
chanfie=5
successfully^
Pressanykeytc
icontinue.
732实验分析
八、报告书写人
附录一最佳置换算法(Optimal)
#include<
stdio.h>
stdlib.h>
time.h>
#defineN12/*随机数列的长度*/
#defineB4/*内存页面数*/intIsInBuf(intbuf[],intlist[],intnum){
inti,j=-1;
intmax_p;
intmax_d=0;
for(i=0;
i<
B;
i++)
{
//当x在buf中,返回-1
//当x不在buf中,且buf[i]为空,则把x
if(buf[i]==list[num])return-1;
elseif(buf[i]==-1)填入buf,并返回-1
buf[i]=list[num];
return-2;
}
for(j=num+1;
j<
N;
j++)
if(buf[i]==list[j]){
if(max_d<
j){
max_d=j;
//buf[i]在list[]中的最近距离
max_p=i;
//list[j]在buf[]的位置
break;
的后半部分,返回
if(j==N)//如果buf满,并且buf[i]不在list[]
位置i
returni;
returnmax_p;
//返回距离最远的buf[]的位置
intmain()
intlist[N];
//={4,3,2,1,4,3,5,4,3,2,1,5};
intbuf[B],i,f[N],j,m,bufuse=0,tmp;
intchange=0;
//置换次数
intinterrupt=0;
//中断次数
intsuccessfully=0;
//访问成功次数
srand((int)time(NULL));
buf[i]=f[i]=-1;
printf("
\n\n"
);
TheOptimalList:
"
list[i]=(int)rand()%10;
%2d"
list[i]);
\n"
\nthelostinOptimal:
i++){
j=IsInBuf(buf,list,i);
if(j==-1){
successfully++;
for(m=0;
m<
=B;
m++){
"
/*成功的打印*/
in<
--%dsuccessfully\n"
/*成功
的打印*/
elseif(j==-2)
{bufuse++;
interrupt++;
printf("
newbuf="
bufuse;
*/
缺页中断的
%d"
buf[m]);
/*缺页中断次数的打印}
for(m;
/*缺页中断的打印*/
--%dinterrupt\n"
/*
打印*/
else
tmp=buf[j];
buf[j]=list[i];
change++;
/*缺页置换的打印*/}
/*缺页置换的打印*/
--%d
change%d-->
out\n"
list[i],tmp);
interrupt=%d\n"
interrupt);
change=%d\n"
change);
successfully=%d\n"
successfully);
return0;
附录二先进先出(FIFO)页面置换算法
#defineB4/*内存页面数*/
intIsInBuf(intbuf[],intx)
inti;
{if(buf[i]==x)/*当x在buf中,返回其位置*/
return-1;
elseif(buf[i]==-1)/*当x不在buf中,且buf[i]为空,则把x填入buf,并返回其位置*/
buf[i]=x;
return-2;
intold=0;
for(i=0;
TheFIFOList:
\nthelostinFIFO:
j=IsInBuf(buf,list[i]);
for(m=0;
m++){printf("
成功
bufuse++;
interrupt++;
/*缺页中断次数的打印*/
/*缺页中断的
tmp=buf[old];
buf[old]=list[i];
old=(old+1)%(int)B;
/*数据在buf中的储存是循环的*/
/*缺页置换的打印*/
附录三LRU置换算法
intIsInBuf(intbuf[],intlist[],intnum)
if(buf[i]==list[num])/*当x在buf中,返回其位置*/j=i;
break;
j=-2;
returnj;
intGet(intbuf[],intlist[],intnum)
intbuff[B];
intbuffuse=0;
inti,j,k,m;
m++)
buff[m]=-1;
for(i=num-1;
i>
=0;
i--)
for(j=0;
if(list[i]==buf[j]){for(k=0;
k<
buffuse;
k++)
if(list[i]==buff[k])break;
if(k==buffuse)
buff[buffuse]=list[i];
buffuse++;
if(buffuse==B)
//intlist[12]=
TheRandomList:
\nthelostinLRU:
change=0;
/*中断的次数*/
if(j==-1)
old=Get(buf,list,i);
tmp=buf[old];
buf[old]=list[i];
/*缺页中断次数的打印
else{
return0;