操作系统课程设计页面置换算法范本Word文档格式.docx
《操作系统课程设计页面置换算法范本Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计页面置换算法范本Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
贾正正
专业班级
网络工程11班
学号
课程设计任务内容
[问题描述]设计一个虚拟存储区和内存工作区,并使用最佳淘汰算法(OPT)、先进先出算法(FIFO)、最近最久未使用算法(LRU)计算访问命中率。
[基本要求]
(1)分析设计要求,给出解决方案
(2)设计合适的测试用例,对得到的运行结果要有分析。
赵建
时间:
12月10日
第一章问题的提出
1.1关于页面置换算法模拟程序问题的产生
在各种存储器管理方式中,有一个共同的特点,即它们都要求将一个作业全部装入内存方能运行,可是有两种情况:
(1)有的作业很大,不能全部装入内存,致使作业无法运行;
(2)有大量作业要求运行,但内存容量不足以容纳所有这些作业。
而虚拟内存技术正式从逻辑上扩充内存容量,将会解决以上两个问题。
从内存中调出一页程序或数据送磁盘的对换区中,一般,把选择换出的页面的算法称为页面置换算法(Page-ReplacementAlgorithms)。
进而页面置换算法模拟程序能客观的将其工作原理展现在我们面前。
1.2任务分析
首先,定义宏变量,设置所占最大内存长度。
编辑以时间为种子,初始化随即发生器。
进行相关页面输入程序的编写以及页面的打印。
尔后,寻找最近最近最久未使用的页面、记录当前内存块中页面离下次使用间隔长度等相关程序的代码编写。
最后,进行)FIFO、LRU、OPT三种算法的编写。
第二章需求分析
2.1需求说明
1.用随机数方法产生页面走向,页面走向长度为L。
2.根据页面走向,分别采用FIFO和LRU算法进行页面置换,统计缺页率;
为简化操作,在淘汰一页时,只将该页在页表中抹去,而不再判断它是否被改写过,也不将它写回到辅存。
3.假定可用内存块和页表长度(作业的页面数)分别为m和k,初始时,作业页面都不在内存。
2.2操作界面和操作方法
*************页面置换算法算法演示****************
请首先输入页面走向长度L:
请首先输入页面数:
根据提示进入算法界面:
在如上的操作界面中分别按照提示进行输入,按回车键表示当前输入完毕,然后进行下个步骤的输入或者得到最终结果。
第3章设计描述
3.1方案设计
其次,寻找最近最近最久未使用的页面、记录当前内存块中页面离下次使用间隔长度等相关程序的代码编写。
最后,进行FIFO、LRU、OPT三种算法的编写。
3.2主要的函数
Input(intm,Prop[L])(打印页面走向状态);
voidprint(Pro*page1)(打印当前的页面);
intSearch(inte,Pro*page1)(寻找内存块中与e相同的块号);
intMax(Pro*page1)(寻找最近最长未使用的页面);
intCount(Pro*page1,inti,intt,Prop[L])(记录当前内存块中页面离下次使用间隔长度);
intmain()(主函数);
随机数发生器
#include<
stdlib.h>
#include<
time.h>
//准备用时钟函数调用库函数
t=time(NULL);
//取时钟时间并存入t调用库函数
srand(t);
//用时间t初始化随机数发生器调用库函数
x=rand()%10+1;
//返回一个1~10之间的随机数
第4章算法描述
4.1主函数流程图
4.2FIFO(先进先出)页面置换算法
i>
L
N
Y
输出当前页面信息
输出当前内存块状
结束
设计原理:
需要进行页面置换,即把内存中装入最早的那个页面淘汰,换入当前的页面。
代码:
if(c==1)//FIFO页面置换
{
n=0;
cout<
<
"
******************************************"
endl;
cout<
cout<
FIFO算法页面置换情况如下:
"
while(i<
m)
if(Search(p[i].num,page)>
=0)//当前页面在内存中
{cout<
p[i].num<
;
//输出当前页p[i].num
cout<
不缺页"
i++;
//i加1
}
else//当前页不在内存中
{
if(t==M)t=0;
else
n++;
//缺页次数加1
page[t].num=p[i].num;
//把当前页面放入内存中
cout<
print(page);
//打印当前页面
t++;
//下一个内存块
i++;
//指向下一个页面
}
缺页次数:
n<
缺页率:
n/m<
8
4.3LRU(最近最久未使用)页面置换算法
页面走向存入数组p[]中,内存块用page[]表示初始化为0
当前p[]中第i个元素是否已在内存
Page[]是否有空
把page[]中最近最久未使用的页面置换出去.i++
i++
把p[i]的内容直接装入最上面一个空内存块,i++
开始
9
当需要淘汰某一页时,选择离当前时间最近的一段时间内最久没有使用过的页先淘汰该算法的主要出发点是,如果某页被访问了,则它可能马上还要被访问。
或者反过来说如果某页很长时间未被访问,则它在最近一段时间
也不会被访问。
if(c==2)//LRU页面置换
{
LRU算法页面置换情况如下:
inta;
t=Search(p[i].num,page);
if(t>
=0)//如果已在内存块中
{
page[t].time=0;
//把与它相同的内存块的时间置0
for(a=0;
a<
M;
a++)
if(a!
=t)page[a].time++;
//其它的时间加1
}
else//如果不在内存块中
//缺页次数加1
t=Max(page);
//返回最近最久未使用的块号赋值给t
//进行替换
page[t].time=0;
//替换后时间置为0
cout<
print(page);
for(a=0;
}
i++;
}
10
4.4OPT(最佳置换算法)
11
需要进行页面置换,把内存中以后一段时间都不使用或是使用时间离现在最远的页面换出。
代码:
if(c==3)//OPT页面置换
OPT算法置换情况如下:
if(Search(p[i].num,page)>
{
else//如果不在内存块中
inta=0;
for(t=0;
t<
t++)
if(page[t].num==0)a++;
//记录空的内存块数
if(a!
=0)//有空内存块
{
intq=M;
for(t=0;
if(page[t].num==0&
&
q>
t)q=t;
//把空内存块中块号最小的找出来
page[q].num=p[i].num;
n++;
print(page);
}
else
inttemp=0,s;
t++)//寻找内存块中下次使用离现在最久的页面
if(temp<
Count(page,i,t,p))
{
temp=Count(page,i,t,p);
s=t;
}//把找到的块号赋给s
page[s].num=p[i].num;
}
}
4.5实现结果
程序在运行的情况下,进入主界面输入菜单,如图3-3所示:
输入10:
图4-5输入10后的输出图
输入22:
图5-6输入数据22后输出