操作系统实验--虚拟存储管理-最佳置换先进先出最近最久未使用Word文件下载.docx
- 文档编号:471248
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:14
- 大小:295.05KB
操作系统实验--虚拟存储管理-最佳置换先进先出最近最久未使用Word文件下载.docx
《操作系统实验--虚拟存储管理-最佳置换先进先出最近最久未使用Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验--虚拟存储管理-最佳置换先进先出最近最久未使用Word文件下载.docx(14页珍藏版)》请在冰点文库上搜索。
④ intid;
//块号
⑤ intflag;
//自适应标志
⑥}page_list[MAX];
⑦intN=0;
//页面表大小
⑧intorder[MAX];
//调用串
⑨ //调用长度
⑩intM=0;
//定义输出内容
⑪intG[MAX][MAX];
//输出置换图
⑫intI,J;
//置换图扫描指针
⑬intLL[MAX];
//缺页序列
⑭intLI;
//缺页序列扫描指针
⑮intRL[MAX];
//置换序列
⑯ //置换序列扫描指针
⑰intRI;
函数说明:
voidinit();
//初始化函数
voidprint();
//输出函数
voidOptimal();
//最佳置换算法
voidFIFO()//先进先出算法
voidLRU();
//最近最久未使用算法
流程图
最佳置换算法:
先进先出置换算法:
最近最久未被访问算法:
代码:
#include<
stdio.h>
#defineMAX100
structPAGE_LIST
{
intid;
intflag;
}page_list[MAX];
intN=0;
intorder[MAX];
//调用长度
intM=0;
intG[MAX][MAX];
intI,J;
intLL[MAX];
intLI;
intRL[MAX];
//置换序列扫描指针
intRI;
voidinit()
inti;
I=0;
J=0;
LI=0;
RI=0;
for(i=0;
i<
100;
i++)
{
page_list[i].id=-1;
page_list[i].flag=999;
}
printf("
请输入页表的大小:
"
);
scanf("
%d"
&
N);
请输入调用长度:
M);
请输入调用串:
\n"
M;
scanf("
order[i]);
}
voiddisplay()
inti,j;
floatx;
置换图为:
N;
printf("
for(j=0;
j<
J;
j++)
printf("
==="
%3d"
G[i][j]);
\n缺页序列为:
LI;
LL[i]);
\n置换序列为:
RI;
RL[i]);
x=(float)J/(float)M;
x*=100;
\n缺页率为:
\n%3.2f%%\n"
x);
//判断页是否在页表内
intIsExist(intx)
if(page_list[i].id==x)
{
return1;
}
return0;
//此算法中自适应标志代表后面序列中是否访问到了此位置
voidOptimal()
inti,j,k;
intcou;
init();
page_list[i].id=order[i];
G[I][J]=page_list[j].id;
I++;
I=0;
J++;
LL[LI]=order[i];
LI++;
for(;
if(!
IsExist(order[i]))
cou=0;
for(j=i+1;
{
if(cou==N-1)
break;
for(k=0;
k<
k++)
if(page_list[k].id==order[j]&
&
page_list[k].flag!
=0)
{
page_list[k].flag=0;
cou++;
}
}
for(j=0;
if(page_list[j].flag!
{
page_list[j].id=order[i];
}
G[I][J]=page_list[j].id;
I++;
I=0;
J++;
LL[LI]=order[i];
LI++;
RL[RI]=order[i];
RI++;
page_list[j].flag=999;
//先进先出算法
//此算法中自适应标志不需要使用
voidFIFO()
intpos=0;
page_list[pos].id=order[i];
pos=(pos+1)%N;
if(i>
=N)
RL[RI]=order[i];
RI++;
//此算法中自适应标志为起未被使用的次数
voidLRU()
intpos,max;
pos=0;
max=0;
if(page_list[j].flag>
max)
pos=j;
max=page_list[j].flag;
page_list[pos].flag=0;
else
if(page_list[j].id==order[i])
page_list[j].flag=0;
if(page_list[j].id==order[i])
continue;
else
page_list[j].flag++;
intmain()
intselect;
do
页面置换算法\n"
1.最佳置换算法(Optimal)\n2.先进先出算法(FIFO)\n"
3.最近最久未使用算法(LRU)\n4.退出程序\n"
请输入您想要执行的操作:
select);
switch(select)
case1:
Optimal();
display();
break;
case2:
FIFO();
case3:
LRU();
case4:
return0;
default:
输入有误,请重新输入!
}while
(1);
结果截图
最佳置换算法
先进先出算法:
最近最久未使用算法:
【小结或讨论】
三种算法的主要区别是确定替换物理块的方式不同:
1、对于先进先出置换算法,设置一个指针,循环从block的首元素指到block的尾元素,就是物理块置换顺序
2、对于LRU置换算法,遍历页表中的页号,根据这些页号最近被引用的顺序,找到最久未被引用的页号,即在输入序列中向前查找离当前页最远的页号,将其所在的物理块置换掉。
3、对于LRU置换算法,遍历输入序列中的页号,根据这些页号将来被引用的顺序,找到将来最长时间未被引用的页号,即在输入序列中向后查找离当前页最远的页号,将其所在的物理块置换掉。
4、通过本次实验,我对于虚拟存储中的分页管理有了更加深入的了解。
理解了最佳页面置换算法、先入先出页面置换算法以及最近最久未被使用页面置换算法的中心思想。
同时发现,最佳页面置换算法得到的缺页率最低,但其要求也更加严格,必须要求知道未来调用的所有序列。
先进先出算法最为简单,但是缺页率最高。
最近最久未被访问算法居中。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 虚拟 存储 管理 最佳 置换 先进 最近 最久未 使用
![提示](https://static.bingdoc.com/images/bang_tan.gif)