操作系统页面置换算法Word格式文档下载.docx
《操作系统页面置换算法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统页面置换算法Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
3.3OPT(最优页)置换算法......................................................................4
4测试.............................................................................................................5
5运行结果......................................................................................................5
6课程设计总结............................................................................................10
页式虚拟存储管理FIFO、LRU和OPT页面置换算法
1
需求分析
1.1
目的和要求
在熟练掌握计算机虚拟存储技术的原理的基础上,利用一种程序设计语言模拟实现几种置换算法,一方面加深对原理的理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础
。
1.2
研究容
模拟实现页式虚拟存储管理的三种页面置换算法(FIFO(先进先出)、LRU(最近最久未使用)和OPT(最长时间不使用)),并通过比较性能得出结论。
前提:
(1)页面分配采用固定分配局部置换。
(2)作业的页面走向和分得的物理块数预先指定。
可以从键盘输入也可以从文件读入。
(3)置换算法的置换过程输出可以在显示器上也可以存放在文件中,但必须清晰可读,便于检验。
2
概要设计
本程序主要划分为4个功能模块,分别是应用FIFO算法、应用LRU算法、应用OPT算法和页面引用串的插入。
2.1
FIFO算法
该模块的主要功能是对相应页面引用串进行处理,输出经过FIFO算法处理之后的结果。
2.2
LRU算法
该模块的主要功功能是对相应的页面引用串进行处理,输出经过LRU算法处理之后的结果。
2.3
OPT算法
该模块的主要功功能是对相应的页面引用串进行处理,输出经过OPT算法处理之后的结果。
2.4
输入新的页面引用串
该模块的主要功能是用户自己输入新的页面引用串,系统默认的字符串是0
0
0,用户可以自定义全新的20个数字页面引用串。
3
详细设计
在进程运行过程中,若其所要访问的页面不在存而需把它们调入存,但存已无空闲空间时,为了保证该进程能正常运行,系统必须从存中调出一页程序或数据,送磁盘的对换区中。
但应将哪个页面调出,须根据一定的算法来确定。
一个好的页面置换算法,应具有较低的页面更换频率。
从理论上讲,应
将那些以后不再会访问的页面换出,或将那些在较长时间不会再访问的页面调
出。
3.3
OPT(最优页)置换算法
最优页置换算法是所有算法中产生页错误率最低的,而且绝对没有Belady异常的问题。
它会置换最长时间不会使用的页。
最优页(OPT)置换算法,是根
据最长时间不会使用的页来决策的。
这就意味着,需要注意存中的页面和页面的距离了。
因此OPT算法是选择最久未使用的页面进行淘汰的。
该算法赋予存中每个页面一个访问字段,用来记录距离此处的最近页面的距离,这样通过比较,就能把最久未使用的页面淘汰掉。
代码:
#include<
iostream.h>
stdlib.h>
const
int
Nsize=10;
Psize=20;
typedef
struct
page
{
yemian;
//页面号
biaoji;
//被访问标记
}page;
/*
页面逻辑结构,结构为方便算法实现设计*/
block[Nsize];
//物理块
page[Psize];
//页面号串
void
Init(int
QString[],int
Nsize)
{//初始化存单元、缓冲区
for(int
i=0;
i<
Nsize;
i++)
block[i].yemian
=
-1;
//找到空闲存
block[i].biaoji
0;
}
for(i=0;
Psize;
page[i].yemian
QString[i];
page[i].biaoji
findSpace(int
{//查找是否有空闲存
if(block[i].yemian
==
-1)
return
i;
//找到空闲存,返回BLOCK中位置
findExist(int
curpage,
{//查找存中是否有该页面
page[curpage].yemian)
//找到存中有该页面,返回BLOCK中位置
findReplace(int
{//查找应予置换的页面
a
if(block[i].biaoji
>
block[a].biaoji)
//找到应予置换页面,返回BLOCK中位置
}
a;
display(int
{//显示
!
-1)//非空闲存
cout<
<
block[i].yemian<
"
;
endl;
/*OPT算法核心部分*/
OPT(int
{//最优页置换算法
exist,space,aition;
float
score=0;
exist
findExist(i,Nsize);
if(exist
-1)//存中有该页面
不缺页"
score+=1;
//统计不缺页次数
Else
space
findSpace(Nsize);
if(space
-1)//找到空闲存
block[space]
page[i];
display(Nsize);
else
j=0;
j<
j++)
l
=i;
l<
l++)
if(block[j].yemian==page[l].yemian)//计算谁是最长时间没使用的
block[j].biaoji=l-i;
break;
block[j].biaoji=Psize-i;
aition
findReplace(Nsize);
//找到应予置换页面
block[aition]
缺页次数为:
20-score<
缺页率为:
(20-score)*100/20<
%"
BlockClear(int
{//块清除
/*主程序*/
main(void)
i,select,Nsize,QString[Psize]={0};
while(select)
页面号引用串:
20;
QString[i]<
+******************************+"
+------------欢迎--------------+"
+--------页面置换算法----------+"
+-----选择<
1>
应用FIFO算法------+"
2>
应用LRU算法-------+"
3>
应用OPT算法-------+"
+---选择<
4>
插入新的页面号引用串+"
+-------选择<
0>
退出------------+"
请选择:
cin>
select;
switch(select)
case
0:
1:
请输入分配的物理块数的大小:
while
(1)
if(Nsize>
0&
&
Nsize<
=10)
Init(QString,Nsize);
FIFO算法结果如下:
FIFO(Nsize);
BlockClear(Nsize);
----------------------"
system("
pause"
);
cls"
---输入有误,物理块数请选择1-10的数---"
endl<
请
输入分配的物理块数的大小:
2:
LRU算法结果如下:
LRU(Nsize);
3:
OPT算法结果如下:
OPT(Nsize);
4:
请输入20个数:
\n"
system
("
default:
提示:
功能号错误!
4
测试
程序在设计过程中,曾经出过这样或者那样的问题,最让我纠结的问题是在设计OPT算法时出现的,当我认为没有问题的时候程序一运行就没有想要的结果,很明显不是语法上的错误,由于在程序编写过程中没有截图,此处没有图片说明了。
都是逻辑上的错误,最让人难以接受的是,不是程序的逻辑,还是思维的逻辑,也就是从一开始编写程序时,自己的想法的错误了,我说怎么老是显示不出正确的结果,后来改正后结果就显示正常了。
5运行结果
5.1主界面
5.2
输入错误的选择
5.3
选择4的时候自己输入新的页面号引用串,此处输入书上的例子
5.4
确认后首部分的页面号引用串改变
5.5
选择OPT算法,相关设置之后
6
课程设计总结
1、通过完成该课程设计,使我了解了什么是缺页中断,以及处理缺页中断的调度算法。
通过自己编程,加深了对理论学习的理解。
自己动手的编写对缺页终端的调度算法了解加深了不少了解,使我也明白了,真理是在实践中证明的。
程序中也出现过这样或者那样的问题,我也曾经颓废过,为了一个简单的逻辑问题纠结了好久,真正弄明白之后才发现自己是那么的蠢,一种豁然开朗的感觉涌上心头。
2、程序执行是稳定的,高效的。
在LRU算法中,要找出最近最久未使用的页面的话,就必须设置有关的访问记录项,且每一次访问这些记录项,页面都必须更新这些记录项。
这个记录项在此程序中为
如此显然要花费较大的系统开销(包括时间和空间上的),这也是实际系统中不直接采用LRU算法作为页面置换算法的直接原因,但由于其在页面置换的优越性,实际系统常使用LRU的近似算法。