页面置换算法地实验报告材料Word文档下载推荐.docx

上传人:b****4 文档编号:8253258 上传时间:2023-05-10 格式:DOCX 页数:19 大小:229.01KB
下载 相关 举报
页面置换算法地实验报告材料Word文档下载推荐.docx_第1页
第1页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第2页
第2页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第3页
第3页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第4页
第4页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第5页
第5页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第6页
第6页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第7页
第7页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第8页
第8页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第9页
第9页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第10页
第10页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第11页
第11页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第12页
第12页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第13页
第13页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第14页
第14页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第15页
第15页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第16页
第16页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第17页
第17页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第18页
第18页 / 共19页
页面置换算法地实验报告材料Word文档下载推荐.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

页面置换算法地实验报告材料Word文档下载推荐.docx

《页面置换算法地实验报告材料Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《页面置换算法地实验报告材料Word文档下载推荐.docx(19页珍藏版)》请在冰点文库上搜索。

页面置换算法地实验报告材料Word文档下载推荐.docx

1.1课程设计任务

深入掌握内存调度算法的概念原理和实现方法。

编写程序实现:

(1)先进先出页面置换算法(FIFO)

(2)最近最久未使用页面置换算法(LRU)

(3)最佳置换页面置换算法(OPT)

设计一个虚拟存储区和内存工作区,编程序演示以上三种算法的具体实现过程,并计算访问命中率。

演示页面置换的三种算法。

通过随机数产生一个指令序列,将指令序列转换成为页地址流。

计算并输出各种算法在不同内存容量下的缺页率。

1.2课程设计需求

在各种存储器管理方式中,有一个共同的特点,即它们都要求将一个作业全部装入内存方能运行,但是有两种情况:

(1)有的作业很大,不能全部装入内存,致使作业无法运行;

(2)有大量作业要求运行,但内存容量不足以容纳所有这些作业。

而虚拟内存技术正式从逻辑上扩充内存容量,将会解决以上两个问题。

从内存中调出一页程序或数据送磁盘的对换区中,通常,把选择换出的页面的算法称为页面置换算法(Page-ReplacementAlgorithms)。

进而页面置换算法程序能客观的将其工作原理展现在我们面前。

第二章概要设计

2.1系统分析

由于分区式管理尽管实现方式较为简单,但存在着严重的碎片问题使得内存的利用率不高。

再者,分区式管理时,由于各作业或进程对应于不同的分区以及在分区内各作业或进程连续存放,进程的大小或内存可用空间的限制。

而且分区式管理也不利于程序段和数据段的共享。

页式管理正是为了减少碎片以及为了只在内存存放那些反复执行或即将执行的程序段与数据部分,而把那些不经常执行的程序段和数据存放于外存待执行时调入,以提高内存利用率而提出来的页式管理有动态页式管理和静态页式管理之分,动态页式管理是在静态页式管理的基础上发展起来的。

请求页式管理属于动态页式管理中的一种,它的地址变换过程与静态页式管理时的相同,也是通过页表查出相应的页面号,由页面号与页内相对地址相加而得到实际物理地址。

有关的地址变换部分是由硬件自动完成的。

当硬件变换机构发现所要求的页不在内存时,产生缺页中断信号,由中断处理程序做出相应的处理。

中断处理程序是由软件实现的。

除了在没有空闲页面时要按照置换算法选择出被淘汰页面之外,还要从外存读入所需要的虚页。

这个过程要启动相应的外存和涉及到文件系统。

因此,请求页式管理是一个十分复杂的过程,内存利用率的提高是以牺牲系统开销的代价换来的。

这里用到了置换算法。

它是在内存中没有空闲页面时被调用。

目的是选出一个被淘汰的页面。

如果内存中有足够的空闲页面存放所调入的页,则不必使用置换算法。

把内存和外存统一管理的真正目的是把那些被访问概率非常高的页存放在内存中。

因此,置换算法应该置换那些被访问概率低的页,将它们移出内存。

2.2调页策略

2.2.1何时调入页面

如果进程的许多页是存放在外存的一个连续区域中,则一次调入若干个相邻的页,会比一次调入一页的效率更高效一些。

但如果调入的一批页面中的大多数都未被访问,则又是低效的。

可采用一种以预测为基础的预调页策略,将那些预计在不久之后便会被访问的页面,预先调入内存。

如果预测较准确,那么,这种策略显然是很有吸引力的。

但目前预调页的成功率仅为50%。

且这种策略主要用于进程的首次调入时,由程序员指出应该先调入哪些页。

2.2.2请求调页策略

当进程在运行中需要访问某部分程序和数据时,若发现其所在的页面不在内存,便即提出请求,由OS将其所需页面调入内存。

由请示调页策略所确定调入的页,是一定会被访问的,再加之请求调页策略比较易于实现,故在目前的虚拟存储器中,大多采用此策略。

但这种策略每次仅调入一页,故须花费较大的系统开销,增加了磁盘I/O的启用频率。

2.2.3从何处调入页面

在请求分页系统中的外存分为两部分:

用于存放文件的文件区和用于存放对换页面的对换区。

通常,由于对换区是采用连续分配方式,而事件是采用离散分配方式,故对换区的磁盘I/O速度比文件区的高。

这样,每当发生缺页请求时,系统应从何处将缺页调入内存,可分成如下三种情况:

系统拥有足够的对换区空间,这时可以全部从对换区调入所需页面,以提高调页速度。

为此,在进程运行前,便须将与该进程有关的文件,从文件区拷贝到对换区。

系统缺少足够的对换区空间,这时凡是不会被修改的文件,都直接从文件区调入;

而当换出这些页面时,由于它们未被修改而不必再将它们换出时,以后需要时,再从对换区调入。

UNIX方式。

由于与进程有关的文件都放在文件区,故凡是未运行过的页面,都应从文件区调入。

而对于曾经运行过但又被换出的页面,由于是被放在对换区,因此在下次调入时,应从对换区调入。

由于UNIX系统允许页面共享,因此,某进程所请求的页面有可能已被其它进程调入内存,此时也就无须再从对换区调入。

2.3模块设计

第三章详细设计

3.1系统设计

在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。

但应将哪 

个页面调出,须根据一定的算法来确定。

通常,把选择换出页面的算法称为页面置换算法(Page_Replacement 

Algorithms)。

一个好的页面置换算法,应具有较低的页面更换频率。

从理论上讲,应将那些以后不再会访问的页面换出,或将那些在较长时间内不会再访问的页面调出。

3.2算法思想及流程图

3.2.1主程序流程图

如图(3—2—1)所示

主流程图(图3—2—1)

3.2.2先进先出(FIFO)页面置换算法

算法的基本思想:

这是最早出现的置换算法。

该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。

该算法实现简单只需把一个进程已调入内存的页面,按先后次序存入一个时间数组,并将其中时间值最大的页面进行淘汰,并替换入新的页面就可以实现。

算法流程图:

如图(3—2—2)所示

FIFO置换算法(图3—2—2)

3.2.3最佳页面置换置换算法(OPT)

其所选择的被淘汰页面,将是永不使用的,或者是在最长时间内不再被访问的页面。

可保证获得最低的缺页率。

但由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法也是无法实现的。

但是可利用该算法去评价其它算法。

如图(3—2—3)所示

OPT页面置换算法(图3—2—3)

3.2.4最近最久未使用页面置换算法LRU

当需要淘汰某一页时,选择离当前时间最近的一段时间内最久没有使用过的页先淘汰。

该算法的主要出发点是,如果某页被访问了,则它可能马上还被访问。

或者反过来说,如果某页很长时间未被访问,则它在最近一段时间不会被访问。

如图(3—2—4)所示

LRU页面置换算法(图3—2—4)

第四章源程序结构分析

4.1程序结构

Input(intm,Prop[L])//打印页面走向状态

srand(j);

//以时钟时间j为种子,初始化随机数发生器

voidprint(Pro*page1)//打印当前的页面

intSearch(inte,Pro*page1)//寻找内存块中与e相同的块号

intMax(Pro*page1)//寻找最近最长未使用的页面

intCount(Pro*page1,inti,intt,Prop[L])//记录当前内存块中页面离下次使用间隔长度

4.2源代码分析

#include<

iostream.h>

#include<

stdlib.h>

time.h>

stdio.h>

#defineL20//页面长度最大为20

intM;

//内存块

structPro//定义一个结构体

{

intnum,time;

};

Input(intm,Prop[L])//打印页面走向状态

cout<

<

"

请输入页面长度(10~20):

;

do

{

cin>

>

m;

if(m>

20||m<

10)

{cout<

endl;

cout<

页面长度必须在10~20之间"

endl<

请重新输入L:

}

elsebreak;

}while

(1);

inti,j;

j=time(NULL);

//取时钟时间

输出随机数:

"

for(i=0;

i<

i++)

p[i].num=rand()%10;

//产生0到9之间的随机数放到数组p中

p[i].time=0;

p[i].num<

}

returnm;

}

voidprint(Pro*page1)//打印当前的页面

Pro*page=newPro[M];

page=page1;

for(inti=0;

M;

page[i].num<

}

intSearch(inte,Pro*page1)//寻找内存块中与e相同的块号

i++)if(e==page[i].num)returni;

//返回i值

return-1;

inte=page[0].time,i=0;

while(i<

M)//找出离现在时间最长的页面

if(e<

page[i].time)e=page[i].time;

i++;

for(i=0;

i++)if(e==page[i].time)returni;

//找到离现在时间最长的页面返回其块号

{

intcount=0;

for(intj=i;

j<

L;

j++)

if(page[t].num==p[j].num)break;

//当前页面再次被访问时循环结束

elsecount++;

//否则count+1

returncount;

//返回count的值

intmain()

intc;

intm=0,t=0;

floatn=0;

Prop[L];

m=Input(m,p);

//调用input函数,返回m值

请输入分配的物理块m(2~6):

do{

if(M>

6||M<

2)

物理块m必须在2~6之间"

请重新输入m:

for(inti=0;

i++)//初始化页面基本情况

{page[i].num=0;

page[i].time=m-1-i;

}

i=0;

1:

FIFO页面置换"

2:

LRU页面置换"

3:

OPT页面置换"

请选择页面置换算法:

c;

system("

cls"

);

if(c==1)//FIFO页面置换

{

n=0;

cout<

FIFO算法页面置换情况如下:

while(i<

m)

{

if(Search(p[i].num,page)>

=0)//当前页面在内存中

{

cout<

//输出当前页p[i].num

不缺页"

i++;

//i加1

}

else//当前页不在内存中

if(t==M)t=0;

else

{

n++;

//缺页次数加1

page[t].num=p[i].num;

//把当前页面放入内存中

cout<

print(page);

//打印当前页面

t++;

//下一个内存块

//指向下一个页面

}

}

缺页次数:

n<

缺页率:

n/m<

if(c==2)//LRU页面置换

LRU算法页面置换情况如下:

inta;

t=Search(p[i].num,page);

if(t>

=0)//如果已在内存块中

{page[t].time=0;

//把与它相同的内存块的时间置0

for(a=0;

a<

a++)

if(a!

=t)page[a].time++;

//其它的时间加1

else//如果不在内存块中

n++;

t=Max(page);

//返回最近最久未使用的块号赋值给t

page[t].num=p[i].num;

//进行替换

page[t].time=0;

//替换后时间置为0

print(page);

=t)page[a].time++;

//其它的时间加1

i++;

}

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

//记录空的内存块数

=0)//有空内存

{

intq=M;

for(t=0;

if(page[t].num==0&

&

q>

t)q=t;

//把空内存块中块号最小的找出来

page[q].num=p[i].num;

n++;

cout<

print(page);

i++;

}

else

inttemp=0,s;

for(t=0;

t++)//寻找内存块中下次使用离现在最久的页面

if(temp<

Count(page,i,t,p))

{

temp=Count(page,i,t,p);

s=t;

}//把找到的块号赋给s

page[s].num=p[i].num;

n++;

cout<

print(page);

}

}while(c==1||c==2||c==3);

return0;

第五章调试

程序在运行的情况下,进入主界面输入菜单,如图(4—1)所示:

页面长度:

输入16,分配的物理块:

输入4,

主界面(图4—1)

选1,进入FIFO算法页面置换,如图(4—2)所示

FIFO算法置换(图4—2)

选2,进入LRU算法页面置换,如图(4—3)所示

LRU算法置换(图4—3)

选3,进入OPT算法页面置换,如图(4—4)所示

OPT算法置换(图4—4)

第六章体会与自我评价

这次操作系统课程设计,让我们对操作系统有了更深的认识,首先操作系统是一管理电脑硬件与软件资源的程序,同时也是计算机系统内核与基石。

操作系统是一个庞大的管理控制程序,大致包括5个方面的管理功能:

我们这次课程设计的题目是页面置换算法,是属于存储器管理。

在进程运行过程中,若其访问的页面不在内存而需把它们调入内存,但内存以无空闲空间时,为了保证该进程能正常的运行,系统必须从内存中调出一页程序或数据送磁盘的兑换区中,但应将哪个页面调出,需根据一定的算法来确定。

通常,把选择换成页面的算法称为页面置换算法。

通过本次课程设计,我们对页面置换算法的了解更加的深刻。

主要有以下置换算法:

OPT(最佳置换算法)、FIFO(先进先出置换算法)、LRU(最近最久未使用算法)。

每种算法都有各自的优缺点,OPT算法是实际中不能实现的,但是可以利用该算法去评价其它算法;

FIFO算法与进程实际运行的规律不相适用,因为在进程中,有些页面经常被访问;

LRU算法是根据页面调入内存后的使用情况进行决策的。

在这次课程设计中,遇到了一些困难,例如怎么实现各种算法,如何进行函数调用及对数据的限制操作等,在遇到这些困难的时候,我们会去查阅资料,仔细看书,尝试用不同的方法解决,在各种方法中选择一种最好的方法,有的时候会碰到不知道如何实现的函数,我们会查看MSDN,这次是用的C++语言做的,每一步都是自己独立完成的,这次课程设计我最大的收获是学以致用,通过这次设计我们看到了自己学习的能力,我们相信在以后的学习中,会更加的努力上进。

最后,还非常感谢辛苦的操作系统老师,首先,因为他辛苦的为我们讲解操作系统这门课,让我们对操作系统有了一定的了解,为这次课程设计奠定了良好的基础,其次,还要感谢他认真指导我们的这次课程设计,给了我们这次总体运用自己能力的机会,我们坚信:

只要功夫深,铁杵磨成针。

第七章参考文献

[1]计算机操作系统汤小丹,梁红兵,哲凤屏西安电子科技大学出版社2007.5

[2]visualC++高级编程范例谭桂华等清华大学出版社2004.5

[3]操作系统教程与实验胡明庆,高巍,钟梅清华大学出版社2007.1

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2