虚拟内存之页面置换算法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013271921/article/details/45462303

四种页面置换算法:

  • 最佳(OPT,Optional)
  • 最近最少使用(LRU,Least Recently Used)
  • 先进先出(FIFO,First In First Out)
  • 时钟(Clock)

一、最佳置换算法

OPT 策略选择置换下次访问距当前时间最长的那些页,可以看出该算法能导致最少的缺页中断,但是由于它要求操作系统必须知道将来的事件,显然这是不可能实现的。但它仍然能作为一种标准来衡量其他算法的性能。

二、最近最少使用算法

LRU 策略置换内存中上次使用距当前最远的页。根据局部性原理,这也是最不可能访问的页。实际上,LRU 策略的性能接近于 OPT 策略。该方法的问题在于比较难以实现。一种实现方法是给每一页添加一个最后访问的时间戳,并且必须每次访问内存时,都更新这个时间戳。即使有这种方案的硬件,开销仍然是非常大的。另外一种可选的方法是维护一个关于访问页的栈,但开销同样很大。

三、先进先出算法

FIFO 策略把分配给进程的页框视为一个循环缓冲区,按循环方式移动页。它所需的只是一个指针,这个指针在该进程的页框中循环。因此这是一种最简单的页面置换策略。除了它的简单性,这种选择方法所隐含的逻辑是置换驻留在内存中最长时间的页:一个很久以前取入内存的页,到现在可能已经不会再用了。这个推断是错误的,因为经常出现一部分程序或数据在整个程序的生命周期中使用频率很高的情况,如果使用 FIFO 算法,则这些页会被反复的换入换出,增加了系统开销。

四、时钟

时钟是 LRU 的近似实现。最简单的时钟策略需要给每一页框管理一个附加位,称为使用位。当某一页首次装入内存时,则将该页框的使用位置为 1;当该页随后被访问到时(在访问产生缺页中断后),他的使用位也会被置为 1。对于页面置换算法用于置换的候选页框集合被视为一个循环缓冲区,并且有一个指针与之相关联。当一页被置换时,该指针被设置成指向缓冲区中的下一个页框。当需要置换一页时,操作系统扫描缓冲区,以查找使用位被置为 0 的一个页框。每当遇到一个使用位为 1 的页框时,操作系统就将该为重新置为 0 ;如果在这个过程开始时,缓冲区所有页框的使用位均为 0,则选择遇到的第一个页框置换;如果所有页框的使用位均为 1,则指针在缓冲区中完整地循环一周,把所有使用位都置为 0,并且停留在最初的位置上,置换该页框中的页。

举例:

某个进程的执行需要访问 5 个不同的页,运行该程序需要的页地址的顺序为:
2 3 2 1 5 2 4 5 3 2 5 2

这里写图片描述

展开阅读全文

没有更多推荐了,返回首页