2、页面置换算法

时间:2021-08-05 20:04:27

置换的东西是页,当页的空间不够时,我们需要将一些内存中的页置换到外存中但是到底如何选择,需要使用算法实现

一、局部置换算法

置换页面的选择范围只局限于当前进程占用的物理页。

1、最优页面置换算法(OPT)

把最后要使用的页置换出来。
评价:
- 无法实现,因为无法预知未来。但是可以用来评估其他算法的效率

2、先入先出算法(FIFO)

链表记录每一页,链首记录的页在物理内存中呆的时间最长,链尾最短。把链首元素置换出去,新加的页加在链尾
评价:
- 实现简单
- 性能较差,置换出去的可能是使用最多的页

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

选择最长时间没有被引用的页面的页面
缺页时计算内存每个页面最近一次的使用的时间,使用链表或栈的压入抽出,链表首最近的
评价:
- 使用栈和链表维护开销很大(在抽出栈和链表中的元素的时候需要遍历栈和链表)
- 很像最优置换算法
- 无法实现


以上算法基本无法实现

1、时钟置换算法(Clock)

对页面访问情况进行大致访问
在页表项增加访问位
页面组织成环形

  1. 页面装入内存,访问位初始为0
  2. 访问内存(读/写)时,访问位置1
  3. 缺页时,从指针当前位置顺序检查环形链表,访问位为0,置换该页,新装入的页的访问位置1;访问位为1,置访问位为0,指针移动到下一页,直到找到可置换的页面

2、页面置换算法

2、改进后的时钟置换算法

添加一个修改位,当修改位和访问位都为0的时候置换,其他与原来的时间置换算法相同,这个以后再看看

3、最不常用算法(LFU)

使用次数最少的页被置换


Belady现象:

采用FIFO等算法时,可能出现分配的物理页面增加,缺页次数反而升高的异常现象
原因:
FIFO算法的置换特征与

LRU算法没有Belady想想


总结

LRU & FIFO & Clock

二、全局置换算法