操作系统实验虚拟存储管理最佳置换先进先出最近最久未使用文档格式.docx

上传人:b****6 文档编号:17346766 上传时间:2022-12-01 格式:DOCX 页数:11 大小:17.04KB
下载 相关 举报
操作系统实验虚拟存储管理最佳置换先进先出最近最久未使用文档格式.docx_第1页
第1页 / 共11页
操作系统实验虚拟存储管理最佳置换先进先出最近最久未使用文档格式.docx_第2页
第2页 / 共11页
操作系统实验虚拟存储管理最佳置换先进先出最近最久未使用文档格式.docx_第3页
第3页 / 共11页
操作系统实验虚拟存储管理最佳置换先进先出最近最久未使用文档格式.docx_第4页
第4页 / 共11页
操作系统实验虚拟存储管理最佳置换先进先出最近最久未使用文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

操作系统实验虚拟存储管理最佳置换先进先出最近最久未使用文档格式.docx

《操作系统实验虚拟存储管理最佳置换先进先出最近最久未使用文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统实验虚拟存储管理最佳置换先进先出最近最久未使用文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

操作系统实验虚拟存储管理最佳置换先进先出最近最久未使用文档格式.docx

2structPAGE_LIST

3{

4intid;

//块号

5intflag;

//自适应标志

6}page_list[MAX];

7intN=0;

//页面表大小

8intorder[MAX];

//调用串

9//调用长度

10intM=0;

//定义输出容

11intG[MAX][MAX];

//输出置换图

12intI,J;

//置换图扫描指针

13intLL[MAX];

//缺页序列

14intLI;

//缺页序列扫描指针

15intRL[MAX];

//置换序列

16//置换序列扫描指针

17intRI;

函数说明:

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++;

}

}

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;

G[I][J]=page_list[j].id;

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;

continue;

page_list[j].flag++;

intmain()

intselect;

do

printf("

页面置换算法\n"

1.最正确置换算法〔Optimal〕\n2.先进先出算法〔FIFO〕\n"

3.最近最久未使用算法〔LRU〕\n4.退出程序\n"

请输入您想要执行的操作:

select);

switch(select)

case1:

Optimal();

display();

case2:

FIFO();

case3:

LRU();

case4:

default:

输入有误,请重新输入!

}while

(1);

结果截图

最正确置换算法

先进先出算法:

最近最久未使用算法:

【小结或讨论】

三种算法的主要区别是确定替换物理块的式不同:

1、对于先进先出置换算法,设置一个指针,循环从block的首元素指到block的尾元素,就是物理块置换顺序

2、对于LRU置换算法,遍历页表中的页号,根据这些页号最近被引用的顺序,找到最久未被引用的页号,即在输入序列中向前查找离当前页最远的页号,将其所在的物理块置换掉。

3、对于LRU置换算法,遍历输入序列中的页号,根据这些页号将来被引用的顺序,找到将来最长时间未被引用的页号,即在输入序列中向后查找离当前页最远的页号,将其所在的物理块置换掉。

4、通过本次实验,我对于虚拟存储中的分页管理有了更加深入的了解。

理解了最正确页面置换算法、先入先出页面置换算法以及最近最久未被使用页面置换算法的中心思想。

同时发现,最正确页面置换算法得到的缺页率最低,但其要求也更加格,必须要求知道未来调用的所有序列。

先进先出算法最为简单,但是缺页率最高。

最近最久未被访问算法居中。

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

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

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

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