页面置换算法

什么是页面置换算法

地址映射过程中,若页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存中选择一个页面将其移除内存,以便为即将调入的页面让出空间。如何选择页面的规则叫做 —— 页面置换算法

常见的算法有:OPT(最佳置换算法)、FIFO(先进先出)、LRU(最近最久未使用)、LFU(最近最少使用)、clock(时钟置换),下面分别总结这几种算法。

OPT

OPT (Optimal) 最佳置换算法: 核心原则: 所选择的要被淘汰的页面时以后都不会再使用的,或者是在最长时间内不再被访问的页面(往后看) ,这样获得最低的缺页率。但由于无法知道进程未来不再使用哪个页面,所以该算法无法实现。因为其实最佳,即可以使用最佳置换算法来评价其他算法。

假定系统为某进程分配了三个物理块,并要访问的页面有: 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
在这里插入图片描述
从上图可以看出,缺页9次,置换6次。

FIFO

FIFO(First in First out)先进先出置换: 核心原则: 当需要淘汰一个页面时,总是选择最先进入缓存的页面进行淘汰(往前看) , 理由就是:最早调入内存的页面不再被使用的可能性最大。

还是上面的实例: 访问页面7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
在这里插入图片描述
从图中可以看到:进程访问页面2时,把最早进入内存的页面7淘汰,其他页面同理。可以看到一共进行了 缺页15次,置换12次。相比最佳置换算法,置换的次数正好是最佳置换算法的1倍。

FIFO算法会产生一个经典的Belady现象,而其他的置换算法不会产生。

什么是Belady现象?

Belady现象指: 采用FIFO算法时,如果对一个进程未分配它所要求的全部页面,有时会发生分配物理块数增多反而缺页率增加的异常现象。

	Belady现象的描述:一个进程P要访问M个页,OS分配N(N<M)个内存页面给进程P;
对一个访问序列S,发生缺页次数为PE(S,N).当N增大(且N小于M)时,PE(S, N)时而增大,
时而减小。FIFO是最早出现的页置换算法之一。Belady现象的原因是FIFO算法的置换特征
与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的,因而FIFO
并不是一个好的置换算法。

注意:只有FIFO算法才会出现这种现象。

Belady现象详细过程: Belady现象显示

LRU

LRU(Least Recently Used)最近最久未使用算法: 核心原则: 当要淘汰一个页面时,总是选择在最近一段时间内最久不使用的页面进行淘汰 (往前看)。

还是上面的实例: 访问页面7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
在这里插入图片描述
一共有12次缺页,9次置换。

LFU

LFU(Least Frequently Used)最近最少使用算法: 核心原则: 如果要淘汰一个页面,选择最近使用次数最少的进行淘汰。 (往前看)

注意:LRU与LFU算法的不同之处,LRU是基于访问时间,LFU是基于访问次数

Clock

简单的CLOCK算法是给每一帧关联一个附加位,称为使用位,访问了则置为1,当下一次因为缺页中断进行遍历时,将1置为0,而置换的便是标志位为0页面。

具体做法:

当某一页首次装入主存时,该帧的使用位设置为1;当该页随后再被访问到时,它的使用位也
被置为1。对于页替换算法,用于替换的候选帧集合看做一个循环缓冲区,并且有一个指针
与之相关联。当某一页被替换时,该指针被设置成指向缓冲区中的下一帧。当需要替换一页时,
操作系统扫描缓冲区,以查找使用位被置为0的一帧。每当遇到一个使用位为1的帧时,操作
系统就将该位重新置为0;如果在这个过程开始时,缓冲区中所有帧的使用位均为0,则选择
遇到的第一个帧替换;如果所有帧的使用位均为1,则指针在缓冲区中完整地循环一周,把所有
使用位都置为0,并且停留在最初的位置上,替换该帧中的页。由于该算法循环地检查各页面
的情况,故称为CLOCK算法,又称为最近未用(Not Recently Used, NRU)算法。

改进Clock算法:

CLOCK算法的性能比较接近LRU,而通过增加使用的位数目,可以使得CLOCK算法更加高效。在使用位的基础上再增加一个修改位,则得到改进型的CLOCK置换算法。这样,每一帧都处于以下四种情况之一:

  • 最近未被访问,也未被修改(u=0, m=0)。
  • 最近被访问,但未被修改(u=1, m=0)。
  • 最近未被访问,但被修改(u=0, m=1)。
  • 最近被访问,被修改(u=1, m=1)。

算法执行如下操作步骤:

  • 从指针的当前位置开始,扫描帧缓冲区。在这次扫描过程中,对使用位不做任何修改。选择遇到的第一个帧(u=0, m=0)用于替换。
  • 如果第1)步失败,则重新扫描,查找(u=0, m=1)的帧。选择遇到的第一个这样的帧用于替换。在这个扫描过程中,对每个跳过的帧,把它的使用位设置成0。
  • 如果第2)步失败,指针将回到它的最初位置,并且集合中所有帧的使用位均为0。重复第1步,并且如果有必要,重复第2步。这样将可以找到供替换的帧。

改进型的CLOCK算法优于简单CLOCK算法之处在于替换时首选没有变化的页。由于修改过的页在被替换之前必须写回,因而这样做会节省时间。

参考文章: 页面置换算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值