| 项目 | 值 |
|---|---|
| 核心概念 | LRU(最近最久未使用):置换时选择最近最长时间没有被访问的页面淘汰 |
| 关键性质 | 不会出现 Belady 异常(满足 stack property) |
| 实现方式 | 计数器法、栈法、双向链表 + 哈希表(O(1)) |
| 考试技巧 | 手算用栈法模拟最快(栈顶 = 最近访问) |
LRU(Least Recently Used,最近最久未使用):当需要置换页面时,选择最近最长时间没有被访问的页面淘汰。
核心假设:如果一个页面最近被访问过,那么它很可能在不久的将来再次被访问(局部性原理)。
| 算法 | 选择标准 | 依据 |
|---|---|---|
| OPT | 将来最长时间不被使用 | 未来信息(不可实现) |
| LRU | 过去最长时间未被使用 | 历史信息(可实现) |
| FIFO | 最早进入内存 | 进入时间 |
LRU 是 OPT 的「可实现版本」,用历史使用情况近似未来访问模式。
维护一个栈,栈顶是最近访问的页面:
页面访问序列:7, 0, 1, 2, 0, 3, 0, 4, 2, 3,物理块数 $= 3$,用栈表示(栈顶在右,栈底在左):
| 访问 | 栈状态(左=栈底) | 是否缺页 | 说明 |
|---|---|---|---|
| 7 | [7] | ✅ 缺页 | 入栈 |
| 0 | [7, 0] | ✅ 缺页 | 入栈 |
| 1 | [7, 0, 1] | ✅ 缺页 | 入栈,栈满 |
| 2 | [0, 1, 2] | ✅ 缺页 | 7 在栈底(最久未用),淘汰 7 |
| 0 | [1, 2, 0] | ❌ 命中 | 0 移到栈顶 |
| 3 | [2, 0, 3] | ✅ 缺页 | 1 在栈底,淘汰 1 |
| 0 | [2, 3, 0] | ❌ 命中 | 0 移到栈顶 |
| 4 | [3, 0, 4] | ✅ 缺页 | 2 在栈底,淘汰 2 |
| 2 | [0, 4, 2] | ✅ 缺页 | 3 在栈底,淘汰 3 |
| 3 | [4, 2, 3] | ✅ 缺页 | 0 在栈底,淘汰 0 |
页面访问序列:1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5,物理块数 $= 3$。FIFO 结果缺页 9 次。
| 访问 | 栈状态 | 缺页 | 说明 |
|---|---|---|---|
| 1 | [1] | ✅ | 入栈 |
| 2 | [1, 2] | ✅ | 入栈 |
| 3 | [1, 2, 3] | ✅ | 入栈 |
| 4 | [2, 3, 4] | ✅ | 淘汰最久未用的 1 |
| 1 | [3, 4, 1] | ✅ | 淘汰最久未用的 2 |
| 2 | [4, 1, 2] | ✅ | 淘汰最久未用的 3 |
| 5 | [1, 2, 5] | ✅ | 淘汰最久未用的 4 |
| 1 | [2, 5, 1] | ❌ | 命中,移到栈顶 |
| 2 | [5, 1, 2] | ❌ | 命中,移到栈顶 |
| 3 | [1, 2, 3] | ✅ | 淘汰最久未用的 5 |
| 4 | [2, 3, 4] | ✅ | 淘汰最久未用的 1 |
| 5 | [3, 4, 5] | ✅ | 淘汰最久未用的 2 |
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。