页面置换算法

---- 在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存中已无空闲空间时,为了保证该进程能正常运行,

系统必须从内存中调出一页程序或数据到磁盘的对换区中。但应将哪个页面调出,需根据一定的算法来确定。

---- 通常,把选择换出页面的算法称为页面置换算法(Page-Replacement Algorithms)。置换算法的好坏,将直接影响到系统的性能。

---- 一个好的页面置换算法,应具有较低的页面更换频率。从理论上讲,应将那些以后不再会访问的页面换出,或把那些在较长时间内不会

再访问的页面调出。下面是几种常用的置换算法。

1、最佳置换算法(Optimal)

-- 最佳置换算法是一种理想化的算法,具有最好的性能,但实际上却难于实现。该算法是由Belady于1996年提出的一种理论上的算法。

该算法所选择的被淘汰的页面,将是以后不再使用的,或是未来最长时间内不再被访问的页面。

采用最佳置换算法,通常可保证获得最低的缺页率。但由于我们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内

不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。

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

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

该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个替换指针,总是指向最老的页面。

但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO算法并

不能保证这些页面不被淘汰。

3、最近最久未使用(LRU)置换算法

-- FIFO置换算法性能之所以较差,是因为它所依据的条件各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况

-- 最近最久未使用(LRU Least Recently Used)的页面置换算法,是根据页面调入内存后使用情况进行决策的。

由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU算法是选择最近最久未使用的页面予以淘汰。

该算法赋予每个页面一个访问字段,用来记录一个页面自从上次被访问以来(到现在)所经历的时间t,当需淘汰一个页面时,选择现有页面中其

t值最大的,即最近最久未使用的页面予以淘汰。

-- LRU置换算法的硬件支持:LRU置换算法虽然是一种比较好的算法,但要求系统有较多的硬件支持。为了了解一个进程在内存中的各个页面各有

多少时间未被进程访问,以及如何快速地知道哪一页是最近最久未使用的页面,须有两类硬件的支持:寄存器

1)寄存器

为了记录某进程在内存中各页的使用情况,需为每个在内存中的页面配置一个移位寄存器,可表示为:R=R(n-1)R(n-2)...R2R1R0

当进程访问某物理块时,要将相应寄存器的R(n-1)位置成1。此时,定时信号将每隔一定时间(例如100ms)将寄存器右移一位。如果我们把n位

寄存器的数看做是一个整数,那么具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。当发生缺页时,首先将它置换出去。

2)栈

可利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶

因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未访问页面的页面号。当发生缺页时,将栈底对应的页置换出去

4、Clock置换算法

-- LRU算法是较好的一种算法,但由于它要求有较多的硬件支持,故在实际应用中,大多采用LRU的近似算法。Clock算法就是用的最多的一种。

1)简单的Clock置换算法

当采用简单Clock算法时,只需为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列

-- 当某页被访问时,其访问位被置为1。置换算法在选择一页淘汰时,只需检查页的访问位,如果是0,就选择将该页换出;若为1,则重新将它置0,

暂不换出,而给该页第二次驻留内存的机会,再按照FIFO算法检查下一个页面。当检查到队列中的最后一个页面时,若其访问位仍为1,则再返回

到队首去检查第一个页面。由于该算法是循环地检查各页面的使用情况,故称为Clock算法

因该算法只有一位访问位,只能用它表示该页是否已经使用过,而置换时是将未使用过的页面换出去,又称为最近未用算法NRU(Not recently used)。

2)改进型Clock置换算法

-- 在将一个页面换出时,如果该页已被修改过,需将该页重新写回到磁盘上;但如果该页未被修改过,则不必将它拷回磁盘。

-- 在改进型Clock算法中,除需考虑页面的使用情况外,需再增加一个因素,即置换代价

-- 这样,在选择页面换出时,既要是未使用过的页面,又要是未被修改过的页面。把同时满足这两个条件的页面作为首选淘汰的页面。

由访问位A和修改位M可以组合成下面四种类型的页面:

  1类(A=0,M=0):表示该页最近既未被访问,又未被修改,是最佳淘汰页

  2类(A=0,M=1):表示该页最近未被访问,但已被修改,并不是很好的淘汰页。

  3类(A=1,M=0):表示该页最近已被访问,但未被修改,该页有可能再被访问。

  4类(A=1,M=1):表示该页最近已被访问且被修改,该页可能再被访问。

在内存中的每个页必定是这四类页面之一,在进行页面置换时,可采用与简单Clock算法相类似的算法,其差别在于该算法需同时检查访问位

修改位,以确定该页是四类页面中的哪一种。其执行过程可分为以下三步:

---- 第一步:从指针所指示的当前位置开始,扫描循环队列,寻找A=0且M=0的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。

      在第一次扫描期间不改变访问位A

---- 第二步:如果第一步失败,即扫描一次后未遇到第一类页面,则开始第二轮扫描,寻找A=0且M=1的第二类页面,将所遇到的第一个这类

      页面作为淘汰页。在第二轮扫描期间,将所有扫描过的页面的访问位都置0.

---- 第三步:如果第二步也失败,即也未找到第二类页面,则将指针返回到开始的位置。然后重复第一步,如果仍失败,必要时再重复第二步,

      此时就一定能找到被淘汰的页。

该算法与简单Clock算法相比,可减少磁盘的I/O操作次数。但为了找到一个可置换的页,可能需经过几轮扫描。换言之,实现该算法本身的

开销将有所增加。

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值