页面置换算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

xx大学

数学与计算机学院

《操作系统》

课程设计说明书

题目:页式虚拟存储管理页面置换算法

专业:计算机类

班级: xx班

学号: xxxxxxxxxxx 姓名: xxxxxxx 指导老师: xxxxxx

2015年5月 27日

目录

一、课程设计目的 (1)

二、课程设计内容和要求 (1)

三、基本原理和解决方案 (1)

四、数据结构及模块划分 (2)

4.1数据结构 (2)

4.2功能模块划分 (3)

五、总体设计 (3)

5.1主要函数 (3)

5.2主要流程及代码 (4)

5.2.1 FIFO(先进先出) (4)

5.2.2 LRU(最近最久未使用) (6)

5.2.3 OPT(最佳置换算法) (8)

六、测试结果及分析 (10)

七、总结 (12)

八、源代码 (12)

一、课程设计目的

在熟练掌握计算机虚拟存储技术的原理的基础上,利用一种程序设计语言模拟实现几种置换算法,一方面加深对原理的理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。

二、课程设计内容和要求

阅读教材《计算机操作系统》第四章,掌握存储器管理相关概念和原理。模拟实现页式虚拟存储管理的三种页面置换算法(OPT、FIFO和LRU),并通过比较性能得出结论。

要求:

(1)页面分配采用固定分配局部置换。

(2)作业的页面走向和分得的物理块数预先指定。可以从键盘输入也可以从文件读入。

3)置换算法的置换过程输出可以在显示器上也可以存放在文件中,但必须清晰可读,便于检验。

三、基本原理和解决方案

在进程运行过程中,若其所访问的页面不存在内存而需要把它们调入存,但内存已无空闲时,为了保证该进程能够正常运行,系统必须从内存中调出一页程序或数据送磁盘的对换区中。但应调出哪个页面,需根据一定的算法来确定,算法的好坏,直接影响到系统的性能。一个好的页面置换算法,应该有较低的页面更换频率。

1、先进先出(FIFO)置换算法的思路

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

1

的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间当一个进程调入页面到内存中时,在内存中找到驻留时间最久的页面(即page[i].time最大),进行替换,。每次替换后,内存中所有页面的时间值都会自加1.

2.最近久未使用(LRU)置换算法的思路

最近久未使用置换算法的替换规则,是根据页面调入内存后的使用情况来进行决策的。与FIFO算法类似,该算法也赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间,当需淘汰一个页面的时候选择现有页面中其时间值最大的进行淘汰。但与FIFO不同的是,每次放入内存的页面的时间值会置0,原来已经存在于内存块中的则自加1.

3.最佳(OPT)置换算法的思路

其所选择的被淘汰的页面,是以后不使用的,或者是在未来时间内不再被访问的页面,采用最佳算法,通常可保证获得最低的缺页率。

四、数据结构及模块划分

4.1数据结构

要模拟实现某一个置换算法,有如下一些对象需要用相关的数据结构来描述:

●作业的页面走向(执行过程中对页面的访问顺序)。用户输入页面总数m,

创建整形数组 int p[m],利用rand()产生一组随机数,并放入到数

组中。

●页框(作业分得的物理块)。由于作业分得的物理块数在置换算法执行

之前已经确定,可以用一些比较简单的数据结构实现。利用结构体数组

实现

2

struct Pro//定义一个结构体

{

int num,time;

};

Pro *page=new Pro[M]; //M为物理块的数量

4.2功能模块划分

大体上可以将整个程序的模块划分成如下几个部分:

1)主模块:主要是初始化、界面和模块调用。

2)页面走向输入模块。(利用rand()产生随机数)

3)置换算法模块。

* 判断模块。决定换出哪一块。每一种置换算法对应一种判断算法。

* 调整模块。根据判断模块的结果,调整作业分得物理块集合中逻辑页面的情况。

* 置换过程输出模块(在显示器上显示或写入文件)。该模块每发生一次置换,由置换算法模块调用一次。除此之外,有些反复执行

的操作考虑用过程或函数实现。总而言之,整个程序应该结构清晰,

界面友好,可读性好,易调试,易扩充,易维护。

五、总体设计

5.1主要函数

int Input(int p[L]);//打印页面走向状态

void Print(Pro *page1);//打印当前页面

int Search(int e,Pro *page1);//寻找内存块中与e相同的块号

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

int Count(Pro *page1,int i,int t,int p[L]);//记录当前内存块中页面离下次使用间隔长度

void Menu();//菜单页面

3

void FIFO(struct Pro[],int p[],int m,int M);

void LRU(struct Pro[],int p[],int m,int M);

void OPT(struct Pro[],int p[],int m,int M);

随机数发生器:

#include

j=time(NULL);//取时钟时间

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

p[i]=rand()%10+1;//产生1到10之间的随机数

5.2主要流程及代码

5.2.1 FIFO (先进先出)

设计原理:需要进行页面置换,即把内存中装入最早的那个页面淘

汰, 换入当前的页面。

算法流程图:

4

开始 N Y

N

相关文档
最新文档