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

上传人:b****9 文档编号:117440 上传时间:2022-10-03 格式:DOCX 页数:14 大小:295.05KB
下载 相关 举报
操作系统实验--虚拟存储管理-最佳置换先进先出最近最久未使用.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

学号 P71514032 专业 计算机科学与技术 姓名

实验日期 2017/11/30 教师签字 成绩

实验报告

【实验名称】 虚拟存储管理

【实验目的】

模拟请求分页虚拟存储管理技术中的硬件地址变换、缺页中断以及页式淘汰算法,处理缺页中断。

清楚认识请求分页管理。

采用最佳置换算法实现分页管理的缺页调度。

采用先进先出算法实现分页管理的缺页调度。

采用LRU算法实现分页管理的缺页调度。

【实验原理】

C语言程序设计

数据结构

最佳置换算法:

其所选择的淘汰页面将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。

采用最佳置换算法通常可保证获得最低的缺页率。

先入先出置换算法:

该算法总是淘汰最先进入内存的页面。

最近最久未被访问算法:

选取过去中最久未被访问的页面进行替换。

【实验内容】

数据结构和符号说明

a)数据结构

②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();//初始化函数

voidprint();//输出函数

voidOptimal();//最佳置换算法

voidFIFO()//先进先出算法

voidLRU();//最近最久未使用算法

流程图

最佳置换算法:

先进先出置换算法:

最近最久未被访问算法:

代码:

#include

#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);

printf("请输入调用长度:

");

scanf("%d",&M);

printf("请输入调用串:

\n");

for(i=0;i

scanf("%d",&order[i]);

}

//输出函数

voiddisplay()

{

inti,j;

floatx;

printf("置换图为:

\n");

for(i=0;i

{

printf("\n");

for(j=0;j

printf("===");

printf("\n");

for(j=0;j

printf("%3d",G[i][j]);

printf("\n");

}

printf("\n缺页序列为:

\n");

for(i=0;i

printf("%3d",LL[i]);

printf("\n置换序列为:

\n");

for(i=0;i

printf("%3d",RL[i]);

x=(float)J/(float)M;

x*=100;

printf("\n缺页率为:

\n%3.2f%%\n",x);

}

//判断页是否在页表内

intIsExist(intx)

{

inti;

for(i=0;i

{

if(page_list[i].id==x)

{

return1;

}

}

return0;

}

//最佳置换算法

//此算法中自适应标志代表后面序列中是否访问到了此位置

voidOptimal()

{

inti,j,k;

intcou;

init();

for(i=0;i

{

page_list[i].id=order[i];

for(j=0;j

{

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

I++;

}

I=0;

J++;

LL[LI]=order[i];

LI++;

}

for(;i

{

if(!

IsExist(order[i]))

{

cou=0;

for(j=i+1;j

{

if(cou==N-1)

break;

for(k=0;k

if(page_list[k].id==order[j]&&page_list[k].flag!

=0)

{

page_list[k].flag=0;

cou++;

}

}

for(j=0;j

if(page_list[j].flag!

=0)

{

page_list[j].id=order[i];

break;

}

for(j=0;j

{

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

I++;

}

I=0;

J++;

LL[LI]=order[i];

LI++;

RL[RI]=order[i];

RI++;

}

for(j=0;j

page_list[j].flag=999;

}

}

//先进先出算法

//此算法中自适应标志不需要使用

voidFIFO()

{

inti,j;

intpos=0;

init();

for(i=0;i

{

if(!

IsExist(order[i]))

{

page_list[pos].id=order[i];

pos=(pos+1)%N;

for(j=0;j

{

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

I++;

}

I=0;

J++;

LL[LI]=order[i];

LI++;

if(i>=N)

{

RL[RI]=order[i];

RI++;

}

}

}

}

//最近最久未使用算法

//此算法中自适应标志为起未被使用的次数

voidLRU()

{

inti,j;

intpos,max;

init();

for(i=0;i

{

if(!

IsExist(order[i]))

{

pos=0;

max=0;

for(j=0;j

{

if(page_list[j].flag>max)

{

pos=j;

max=page_list[j].flag;

}

}

page_list[pos].id=order[i];

page_list[pos].flag=0;

for(j=0;j

{

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

I++;

}

I=0;

J++;

LL[LI]=order[i];

LI++;

if(i>=N)

{

RL[RI]=order[i];

RI++;

}

}

else

{

for(j=0;j

if(page_list[j].id==order[i])

{

page_list[j].flag=0;

break;

}

}

for(j=0;j

if(page_list[j].id==order[i])

continue;

else

page_list[j].flag++;

}

}

intmain()

{

intselect;

do

{

printf("页面置换算法\n");

printf("1.最佳置换算法(Optimal)\n2.先进先出算法(FIFO)\n");

printf("3.最近最久未使用算法(LRU)\n4.退出程序\n");

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

");

scanf("%d",&select);

switch(select)

{

case1:

Optimal();

display();

break;

case2:

FIFO();

display();

break;

case3:

LRU();

display();

break;

case4:

return0;

default:

printf("输入有误,请重新输入!

\n");

}

}while

(1);

return0;

}

结果截图

最佳置换算法

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

当前位置:首页 > 求职职场 > 简历

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

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