页面替换算法

来自http://59.64.80.152/vod/2739346/content/003003004001/default.htm  

目前。在虚拟存储器常用的页面替换算法有如下几种:

1、 随机算法,即RAND算法(Random algorithm)。

2、 先进先出算法,即FIFO算法(First-In First-Out algorithm)。

3、 近期最少使用算法,即LFU算法(Least Frequently Used algorithm)。

4、 最久没有使用算法,即LRU算法(Least Recently Used algorithm)。


5、 最优替换算法,即OPT算法(OPTimal replacemant algorithm)。

目前。在虚拟存储器常用的页面替换算法有如下几种:

1、 随机算法,即RAND算法(Random algorithm)。

    利用软件或硬件的随机数发生器来确定主存储器中被替换的页面。这种算法最简单,而且容易实现。但是,这种算法完全没有利用主存储器中页面调度情况的历史信息,也没有反映程序的局部性,所以命中率比较低。


2、 先进先出算法,即FIFO算法(First-In First-Out algorithm)。

    这种算法选择最先调入主存储器的页面作为被替换的页面。它的优点是比较容易实现,能够利用主存储器中页面调度情况的历史信息,但是,没有反映程序的局部性。因为最先调入主存的页面,很可能也是经常要使用的页面。


3、 近期最少使用算法,即LFU算法(Least Frequently Used algorithm)。 

    这种算法选择近期最少访问的页面作为被替换的页面。显然,这是一种非常合理的算法,因为到目前为止最少使用的页面,很可能也是将来最少访问的页面。该算法既充分利用了主存中页面调度情况的历史信息,又正确反映了程序的局部性。但是,这种算法实现起来非常困难。它要为每个页面设置一个很长的计数器,并且要选择一个固定的时钟为每个计数器定时计数。在选择被替换页面时,要从所有计数器中找出一个计数值最大的计数器。因此,通常采用另外一种变通的办法,就是下面的LRU算法。


4、 最久没有使用算法,即LRU算法(Least Recently Used algorithm)。

    这种算法把近期最久没有被访问过的页面作为被替换的页面。它把LRU算法中要记录数量上的"多"与"少"简化成判断"有"与"无",因此,实现起来比较容易。

5、 最优替换算法,即OPT算法(OPTimal replacemant algorithm)。

    上面介绍的几种页面替换算法主要是以主存储器中页面调度情况的历史信息为依据的,它假设将来主存储器中的页面调度情况与过去一段时间内主存储器中的页面调度情况是相同的。显然,这种假设不总是正确的。最好的算法应该是选择将来最久不被访问的页面作为被替换的页面。这种替换算法的命中率一定是最高的。这就是最优替换算法,简称OPT算法。

    要实现OPT算法,唯一的办法是让程序先执行一遍,记录下实际的页地址流情况。根据这个页地址流才能找出当前要被替换的页面。显然,这样做是不现实的。因此,OPT算法只是一种理想化的算法,然而,它也是一种很有用的算法。实际上,经常把这种算法用来作为评价其它页面替换算法好坏的标准。在其它条件相同的情况下,哪一种页面替换算法的命中率与OPT算法最接近,那么,它就是一种比较好的页面替换算法。

    下面,用一个典型的页地址流来评价FIFO、LRU和OPT三种页面替换算法的性能。其中,最主要的是命中率。当然,命中率还与程序的页地址流情况,页面的大小,主存储器的容量等因素有关。这些将在下一节介绍。 

例1:一个程序共有5个页面组成,分别为P1~P5。程序执行过程中的页地址流(即程序执行中依次用到的页面)如下:P1,P2,P1,P5,P4,P1,P3,P4,P2,P4假设分配给这个程序的主存储器共有3个页面。图3.32表示FIFO、LRU和OPT三种页面替换算法对这3页主存的使用情况,包括调入、替换和命中等。图中,用"*"号标记下次将要被替换掉的页面。

    在页面调度中,有一个特别需要注意的问题,即所谓的"颠簸"(Thrashing)现象。看下面的有个例子。 

例2:一个循环程序,依次使用P1,P2,P3,P4四个页面,分配给这个程序的主存页面数为3个。FIFO、LRU和OPT三种页面替换算法对主存页面的调度情况如图3.33所示。OPT算法命中3次,而FIFO和LRU算法一次也没有命中。在FIFO和LFU算法中,总是发生下次就要使用的页面本次被替换出去了。这就是"颠簸"现象。

例1:一个程序共有5个页面组成,分别为P1~P5。程序执行过程中的页地址流(即程序执行中依次用到的页面)如下:P1,P2,P1,P5,P4,P1,P3,P4,P2,P4假设分配给这个程序的主存储器共有3个页面。图3.32表示FIFO、LRU和OPT三种页面替换算法对这3页主存的使用情况,包括调入、替换和命中等。图中,用"*"号标记下次将要被替换掉的页面。

    在上面介绍的5种页面替换算法中,随机算法的命中率比较低,一般仅用于必须用硬件实现,而且对命中率要求不太高的场合。LFU算法由于其实现起来特别困难,目前很少被采用。因此,在虚拟存储器中,实际上有可能被采用的页面替换算法就只有FIFO和LRU两种。

图3.32 三种页面替换算法对同一个页地址流的调度过程

    从图3.32中可以看出,FIFO算法的命中率最低,LRU算法的命中率与OPT算法很接近。这一结论具有普遍意义。因此,在实际使用中,LRU算法是一种比较好的算法。目前,许多机器的虚拟存储器都采用LRU算法。

例2:一个循环程序,依次使用P1,P2,P3,P4四个页面,分配给这个程序的主存页面数为3个。FIFO、LRU和OPT三种页面替换算法对主存页面的调度情况如图3.33所示。OPT算法命中3次,而FIFO和LRU算法一次也没有命中。在FIFO和LRU算法中,总是发生下次就要使用的页面本次被替换出去了。这就是"颠簸"现象。

    一般来说,对于一个循环程序,当分配给它的页面数小于程序所需要的页面数数时,有可能发生"颠簸"现象。这时,无论是FIFO算法,还是LRU算法,它们的命中率都明显地低于OPT算法。

图3.33 页面调度中的颠簸现象

    对于这个例子,只要再多分配给它一个页面,三种算法的命中率都能达到4次(最大值)。因此,命中率不仅与页地址流有关,而且也与分配给程序的主存页面数等有关。

    一般来说,分配给程序的主存页面数越多,虚页装入到主存到中的机会也就越多,因此命中率也可能越高,至少不应该下降。

设计一个虚拟存储区和内存工作区,并使用下列算法计算访问命中率. (1) 进先出的算法(FIFO) (2) 最近最少使用的算法(LRU) (3) 最佳淘汰算法(OPT)(4) 最少访问页面算法(LFU) (5) 最近最不经常使用算法(NUR) 命中率=1-页面失效次数/页地址流长度 本实验的程序设计基本上按照实验内容进行。即首先用 srand()和 rand()函数定 义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法 计算出相应的命中率。相关定义如下: 1 数据结构 (1)页面类型 typedef struct{ int pn,pfn,counter,time; }pl-type; 其中 pn 为页号,pfn 为面号, counter 为一个周期内访问该页面的次数, time 为访问时间. (2) 页面控制结构 pfc-struct{ int pn,pfn; struct pfc_struct *next;} typedef struct pfc_struct pfc_type; pfc_type pfc_struct[total_vp],*freepf_head,*busypf_head; pfc_type *busypf_tail; 其中 pfc[total_vp]定义用户进程虚页控制结构, *freepf_head 为空页面头的指针, *busypf_head 为忙页面头的指针, *busypf_tail 为忙页面尾的指针. 2.函数定义 (1)Void initialize( ):初始化函数,给每个相关的页面赋值. (2)Void FIFO( ):计算使用 FIFO 算法时的命中率. (3)Void LRU( ):计算使用 LRU 算法时的命中率. (4)Void OPT( ):计算使用 OPT 算法时的命中率. (5)Void LFU( ):计算使用 LFU 算法时的命中率. (6)Void NUR( ):计算使用 NUR 算法时的命中率. 3.变量定义 (1)int a[total_instruction]: 指令流数据组.(2)int page[total_instruction]: 每条指令所属的页号. (3)int offset[total_instruction]: 每页装入 10 条指令后取模运算页号偏移 值. (4)int total_pf: 用户进程的内存页面数. (5)int disaffect: 页面失效次数.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值