操作系统 页面置换算法docWord文件下载.docx
- 文档编号:22852208
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:24
- 大小:193.81KB
操作系统 页面置换算法docWord文件下载.docx
《操作系统 页面置换算法docWord文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统 页面置换算法docWord文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
该算法赋予每个页面一个访
问字段,用来记录一个页面自上次被访问以来所经历的时间t,,当须淘汰一个页面时,选择
现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。
四.设计思想:
选择置换算法,先输入所有页面号,为系统分配物理块,依次进行置换:
FIFO基本思想:
是用队列存储内存中的页面,队列的特点是先进先出,与该算法是一致的,所以每当发生缺页时,就从队头删除一页,而从队尾加入缺页。
或者借助辅助数组time[mSIZE]记录物理块中对应页面的进入时间,每次需要置换时换出进入时间最小的页面。
OPT基本思想:
是用一维数组page[pSIZE]存储页面号序列,memery[mSIZE]是存储装入物理块中的页面。
数组next[mSIZE]记录物理块中对应页面的最后访问时间。
每当发生缺页时,就从物理块中找出最后访问时间最大的页面,调出该页,换入所缺的页面。
【特别声明】
若物理块中的页面都不再使用,则每次都置换物理块中第一个位置的页面。
LRU基本思想:
数组flag[10]标记页面的访问时间。
每当使用页面时,刷新访问时间。
发生缺页时,就从物理块中页面标记最小的一页,调出该页,换入所缺的页面。
五、总体流程
1、根据要求设计页面淘汰算法的流程
●运行程序进入主页面,选择输入模式,随机和手动输入两种模式
(1)随机模式
●输入物理块和页面号引用串长度的随机范围
●按要求随机生成页面号引用串
●进入页面置换算法选择模式
●1为FIFO,2为LRU,3为OPT,4为退出
●产生结果,分析数据正确型,完成后可以再次选择,进行不同的模式来计算
●退出关闭程序
(2)手动模式
●手机输入物理块和页面号引用串长度的数值
●按要求生成页面号引用串
Ø
FIFO算法流程图:
OPT算法流程图:
LRU算法流程图:
六、源代码
#include<
stdio.h>
stdlib.h>
#include<
iostream.h>
time.h>
#defineL20//页面走向长度最大为20
/*全局变量*/
intmSIZE;
/*物理块数*/
intpSIZE;
/*页面号引用串个数*/
staticintmemery[10]={0};
/*物理块中的页号*/
staticintpage[100]={0};
/*页面号引用串*/
staticinttemp[100][10]={0};
/*辅助数组*/
/*置换算法函数*/
voidFIFO();
voidLRU();
voidOPT();
voidHwi();
/*辅助函数*/
voidprint(unsignedintt);
voidzinstruction();
voidsinstruction();
voidmDelay(unsignedintDelay);
/*主函数*/
voidmain()
{
inteneration;
do
{
system("
color0D"
);
;
printf("
请选择操作\n"
1为选择随记生成页面引用串\n"
2为手动输入物理块数和页面页面号引用串个数:
[]\b\b"
scanf("
%d"
&
eneration);
switch(eneration)
case2:
cls"
sinstruction();
getchar();
Hwi();
break;
case1:
zinstruction();
inti,k,code,j,a,b,f,h;
color0B"
srand(time(NULL));
请输入物理块的随机参数的范围个数,两个数之间请用空格隔开(<
<
M<
):
"
%d%d"
a,&
b);
mSIZE=rand()%(b-a)+a;
/*产生a-b(包括a和b)的随机数*/
请输入页面号引用串的随机范围,两个数之间请用空格隔开(<
P<
f,&
h);
/*产生f-h(包括f和h)的随机数*/
pSIZE=rand()%(h-f)+f;
随机产生的物理块数x=%d和页面号引用串长度y=%d\n"
mSIZE,pSIZE);
do
if(pSIZE>
100)
实际页面长度须小于100;
请重新输入L:
"
elsebreak;
}while
(1);
j=time(NULL);
//取时钟时间
srand(j);
//以时钟时间x为种子,初始化随机数发生器
随机产生页面号引用串:
\n"
puts("
按任意键继续>
>
for(i=0;
i<
pSIZE;
i++)
page[i]=rand()%10;
//产生1到9之间的随即数放到page[i]中
}
color0E"
do{
for(k=0;
k<
=(pSIZE-1)/20;
k++)
{
for(i=20*k;
(i<
pSIZE)&
&
20*(k+1));
{
if(((i+1)%20==0)||(((i+1)%20)&
(i==pSIZE-1)))
printf("
%d\n"
page[i]);
else
%d"
}
printf("
正在加载函数,请稍等......\n"
,加载完成、按任意键继续\n"
getchar();
}
请选择页面置换算法:
\t\t\t*\n"
printf("
-----------------------------------------\n"
1.先进先出(FIFO)2.最近最久未使用(LRU)\n"
3.最佳(OPT)4.退出\n"
请选择操作:
code);
switch(code)
FIFO();
LRU();
case3:
OPT();
case4:
system("
color0A"
*******************************\n*"
*谢谢使用页面置换算法演示器!
*\n*"
*by-王力&
王运!
exit(0);
default:
输入错误,请重新输入:
按任意键重新选择置换算法:
getchar();
system("
}while(code!
=4);
default:
输入错误,请重新选择:
}while(eneration!
=1||eneration!
=2);
}
voidHwi()
inti,k,code;
请输入物理块的个数(M<
=10):
mSIZE);
请输入页面号引用串的个数(P<
=100):
pSIZE);
请依次输入页面号引用串(连续输入,需用空格隔开):
page[i]);
puts("
输入的页面号引用串为:
按任意键继续\n"
\n*"
/*设置延迟*/
voidmDelay(unsignedintDelay)
unsignedinti;
for(;
Delay>
0;
Delay--)
for(i=0;
124;
\b"
/*显示程序的注意事项*/
voidzinstruction()
说明:
1、目前你选择的是随机输入,系统将随机生成页面号引用串\n"
2、选择页面面置换算法FIFO/OPT/LRU\n"
3、得出结果,关闭程序\n"
voidsinstruction()
1、目前你选择的是手动输入页面号引用串、请再次确认\n"
2、选择页面面置换算法有FIFO/OPT/LRU\n"
voidprint(unsignedintt)
inti,j,k,l;
intflag;
置换顺序依次为:
for(k=0;
for(i=20*k;
if(((i+1)%20==0)||(((i+1)%20)&
printf("
%d\n"
else
%d"
for(j=0;
j<
mSIZE;
j++)
mSIZE+20*k)&
if(i>
=j)
|%d|"
temp[i][j]);
||"
for(i=mSIZE+20*k;
for(flag=0,l=0;
l<
l++)
if(temp[i][l]==temp[i-1][l])
flag++;
if(flag==mSIZE)/*页面在物理块中*/
/*每行显示20个*/
if(i%20==0)
continue;
输出结果:
\n"
缺页次数:
%d\t\t"
t+mSIZE);
缺页率:
%d/%d\t\t"
t+mSIZE,pSIZE);
置换次数:
t);
/*FIFO算法*/
voidFIFO()
intmemery[10]={0};
inttime[10]={0};
/*记录进入物理块的时间*/
inti,j,k,m;
intmax=0;
/*记录换出页*/
intcount=0;
/*记录置换次数*/
/*前mSIZE个数直接放入*/
memery[i]=page[i];
time[i]=i;
for(j=0;
temp[i][j]=memery[j];
for(i=mSIZE;
/*判断新页面号是否在物理块中*/
for(j=0,k=0;
if(memery[j]!
=page[i])
k++;
if(k==mSIZE)/*如果不在物理块中*/
count++;
/*计算换出页*/
max=time[0]<
time[1]?
0:
1;
for(m=2;
m<
m++)
if(time[m]<
time[max])
max=m;
memery[max]=page[i];
time[max]=i;
/*记录该页进入物理块的时间*/
temp[i][j]=memery[j];
else
print(count);
/*LRU算法*/
voidLRU()
intflag[10]={0};
/*记录页面的访问时间*/
flag[i]=i;
flag[j]=i;
/*刷新该页的访问时间*/
max=flag[0]<
flag[1]?
if(flag[m]<
flag[max])
flag[max]=i;
/*记录该页的访问时间*/
/*OPT算法*/
voidOPT()
intnext[10]={0};
/*记录下一次访问时间*/
inti,j,k,l,m;
intmax;
count++;
/*得到物理快中各页下一次访问时间*/
for(m=0;
for(l=i+1;
if(memery[m]==page[l])
break;
next[m]=l;
max=next[0]>
=next[1]?
if(next[m]>
next[max])
/*下一次访问时间都为pSIZE,则置换物理块中第一个*/
memery[max]=page[i];
for(j=0;
else{
四、结果分析:
随机产生的物理块数为和页面数目分别为3和10:
随机产生的物理块数为和页面数目分别为3和12:
根据结果,我们不难发现,OPT算法,是三种算法中性能最好的,它的置换次数最少,LRU次之,,不过性能最差的还是FIFO,由于缺页率=缺页次数/总的页面数,所以我们不难发现,随着物理块数的增加,缺页率都相应有所增加,但是OPT算法的增加较为明显,即产生了belady现象。
五、课程设计总结:
通过本次课程设计,让我对页面淘汰算法有了充分的了解,我不仅对我们常用的算法进行了编写,还
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 页面置换算法doc 页面 置换 算法 doc