LRU页面置换算法
定义
LRU(最近最少使用)算法就是:每次需要淘汰页面时,选那个“最长时间没被访问”的页面换出去。
它是一种典型的缓存置换算法,用来决定内存不够时应该把哪一页踢掉。
LRU 的核心思想:过去访问行为预测未来访问行为。
举例
设有 3 个物理块,访问序列:
1, 2, 3, 2, 4, 1, 2
我们模拟 LRU:
| 步骤 | 访问 | 内存状态 | 淘汰 |
|---|---|---|---|
| 1 | 1 | 1 | - |
| 2 | 2 | 1 2 | - |
| 3 | 3 | 1 2 3 | - |
| 4 | 2 | 1 3 2 | 2刚被访问,放到最新 |
| 5 | 4 | 3 2 4 | 淘汰1,最久没用 |
| 6 | 1 | 2 4 1 | 淘汰3 |
| 7 | 2 | 4 1 2 | - |
思想:每次访问都把页面放到“最新”位置。淘汰最久没用的。
实现LRU
- 链表(或双端队列)实现:
最新访问的页放队尾
最久未访问的页放队头
缺页时:淘汰队头
每次命中:把该页移动到队尾
缺点:需要频繁移动节点,时间 O(1),但真实硬件上开销仍然不小。
- 硬件支持的“访问位 + 时钟”近似 LRU:
因为真正 LRU 实现太重,所以 CPU 给每个页表项提供:
Referenced bit(访问位,R bit)
Dirty bit(修改位)
系统周期性:
将所有页的访问位复制到一个计数器中
得到一个“老化值”(aging)
更像是“用计数器模拟访问时间先后”。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 JasmineRain's blog!
评论
