【操作系统】页面置换算法(OPT/FIFO/LRU)

考点频率 :★★★★★(必考计算题,每年至少一道)

难度 :⭐⭐⭐⭐

建议:重点掌握三种算法的核心思想、缺页次数的手工计算、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 #操作系统

相关推荐
小O的算法实验室1 小时前
2026年CIE,优化客货协同运输:综合地铁系统的列车容量动态分配
算法
Coder_Shenshen2 小时前
西门子S7CommPlus协议鉴权算法原理与流程详解
网络·后端·算法
硕风和炜3 小时前
【LeetCode: 2492. 两个城市间路径的最小分数 + DFS】
java·算法·leetcode·深度优先·dfs·bfs·并查集
我是一颗柠檬4 小时前
【Java项目技术亮点】加权轮询负载均衡算法
java·算法·负载均衡
灯厂码农4 小时前
C语言动态内存分配完全指南(malloc、calloc、realloc、free)
java·c语言·算法
凯瑟琳.奥古斯特5 小时前
K次取反最大化数组和解法(力扣1005)
开发语言·c++·算法·leetcode·职场和发展
Jerry6 小时前
LeetCode 203. 移除链表元素
算法
地平线开发者6 小时前
征程 6 | 工具链 QAT ObserverBase 源码解析
算法