考点频率 :★★★★★(必考计算题,每年至少一道)
难度 :⭐⭐⭐⭐
建议:重点掌握三种算法的核心思想、缺页次数的手工计算、FIFO的Belady异常
1️⃣ 为什么需要页面置换?
在虚拟存储系统中,当进程访问的页面不在内存时,会触发缺页中断 。如果此时内存已满(没有空闲页框),操作系统必须选择一个页面换出到磁盘,腾出空间装入新页面。选择哪个页面换出的策略,就是页面置换算法。
理想情况是换出一个"以后很长时间都不会用到"的页面------但系统无法预知未来。因此,不同的置换算法本质上是用不同的策略猜测"哪个页面最不值得保留"。
2️⃣ 最佳置换算法(OPT,Optimal)
2.1 核心思想
选择未来最长时间内不会被访问的页面换出。
2.2 特点
- 理论最优:缺页率最低(任何实际算法都不可能超过OPT)
- 不可实现:系统无法预知未来的访问序列(只能作为衡量其他算法性能的参考标准)
2.3 示例
访问序列:7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1,内存容量3个页框。
手工模拟(计算缺页次数,缺页时用 ⚠️ 标记):
| 访问 | 内存状态(初始空) | 是否缺页 | 置换说明 |
|---|---|---|---|
| 7 | 7, _, _ | ⚠️ 缺页 | 装入7 |
| 0 | 7, 0, _ | ⚠️ 缺页 | 装入0 |
| 1 | 7, 0, 1 | ⚠️ 缺页 | 装入1 |
| 2 | 0, 1, 2 | ⚠️ 缺页 | 7未来最远(下次访问在最后),换出7 |
| 0 | 0, 1, 2 | 命中 | 0已在内存 |
| 3 | 1, 2, 3 | ⚠️ 缺页 | 0下次访问很近(第7步),换出0 |
| 0 | 2, 3, 0 | ⚠️ 缺页 | 1未来最远,换出1 |
| 4 | 3, 0, 4 | ⚠️ 缺页 | 2未来最远,换出2 |
| ...(后续略) | ... | ... | ... |
本题最终缺页次数为 9 次(完整模拟结果)。OPT是所有算法中缺页最少的,但仅用作理论对比,实际系统无法实现。
3️⃣ 先进先出置换算法(FIFO)
3.1 核心思想
选择在内存中驻留时间最长的页面换出(即最早进入内存的页面)。
3.2 实现方式
维护一个队列,新页面装入时加入队尾,淘汰时从队首移出。
3.3 优缺点
| 优点 | 缺点 |
|---|---|
| 实现极其简单(只需维护一个队列) | 性能不佳(经常换出频繁使用的页面) |
| 硬件开销小 | 可能发生Belady异常 |
3.4 Belady异常(重点)
定义 :采用FIFO算法时,分配给进程的物理页框数增加,缺页次数反而增加的现象。
示例 :访问序列 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
- 分配3个页框时:缺页 9 次
- 分配4个页框时:缺页 10 次(反而更多!)
Belady异常是FIFO的"致命伤",也是软考选择题的常考点。其他算法(LRU、OPT)不会出现此现象。
4️⃣ 最近最久未使用置换算法(LRU,Least Recently Used)
4.1 核心思想
选择最长时间未被访问的页面换出。依据是:过去未被访问的页面,将来也可能不会被访问。
4.2 实现方式
- 硬件栈:每次访问页面时,将该页面移到栈顶;淘汰时选择栈底页面
- 计数器法:每个页面维护一个访问时间戳,淘汰时选择时间戳最小的页面
4.3 优缺点
| 优点 | 缺点 |
|---|---|
| 性能较好(接近OPT,无Belady异常) | 硬件开销大(需要记录访问顺序) |
| 符合局部性原理 | 实现比FIFO复杂 |
4.4 示例(与OPT相同的访问序列)
访问序列:7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1,内存3个页框,模拟缺页次数:
| 访问 | 内存状态(LRU顺序) | 是否缺页 | 说明 |
|---|---|---|---|
| 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 |
| ...后续 | ... | ... | ... |
本题最终缺页次数为 12 次(完整模拟结果)。性能介于OPT和FIFO之间,是实际系统中较常用的算法。
5️⃣ 三种算法对比表(重点)
| 对比项 | OPT | FIFO | LRU |
|---|---|---|---|
| 淘汰依据 | 未来最长时间不访问 | 最早进入内存 | 最久未被访问 |
| 是否可实现 | ❌(需预知未来) | ✅ | ✅(需硬件支持) |
| 平均缺页率 | 最低 | 较高 | 较低(接近OPT) |
| 硬件开销 | 无(理论模型) | 最低 | 较高 |
| Belady异常 | 无 | 有 | 无 |
| 适用场景 | 性能对比基准 | 简单系统、嵌入式 | 通用操作系统 |
6️⃣ 经典例题
例题1 :某系统采用FIFO置换算法,分配给某进程3个页框。访问序列为 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5,求缺页次数。若页框数增加到4个,缺页次数是多少?这种现象称为?
解析:
- 3个页框时:缺页 9 次
- 4个页框时:缺页 10 次(反而增加了)
- 这种现象称为 Belady异常
答案:9次,10次,Belady异常
例题2:以下关于页面置换算法的叙述中,正确的是( )。
A. OPT算法可以实现,且缺页率最低
B. FIFO算法不会出现Belady异常
C. LRU算法需要记录页面的访问历史
D. LRU算法的缺页率一定低于FIFO
解析 :A错误(OPT不可实现);B错误(FIFO是唯一会出现Belady异常的算法);D错误(LRU通常优于FIFO,但不是绝对保证每个序列都更低)。C正确。选 C。
7️⃣ 记忆口诀
OPT看未来,理论最优难实现。
FIFO先来先淘汰,Belady异常它独有。
LRU看过去,最近未用先换出。
8️⃣ 小测验(评论区对答案)
某虚拟存储系统采用LRU置换算法,分配给进程4个页框。访问序列为
1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5(与例题1相同序列),求缺页次数。对比FIFO的结果(4页框时10次),你发现了什么?
🔔 本专栏日更2篇,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容
#软考中级 #软件设计师 #页面置换 #OPT #FIFO #LRU #操作系统