Appearance
考点清单
- [x] 分页存储原理(页号/页内地址/页表/物理块号)
- [x] 页面置换算法(OPT/FIFO/LRU/淘汰原则)
- [x] 快表与慢表
- [x] 逻辑地址→物理地址转换计算
笔记
分页存储原理
逻辑页分为页号和页内地址,页内地址就是物理偏移地址,页号与物理块号并非按序对应,需查询页表得知页号对应的物理块号,再用物理块号 + 偏移地址 = 物理地址。

- 优点:利用率高,碎片小,分配及管理简单
- 缺点:增加了系统开销,可能产生抖动现象
页面置换算法
| 算法 | 原理 | 特点 |
|---|---|---|
| 最优算法 (OPT) | 选择未来最长时间内不被访问的页面置换 | 理论最优,无法实现,用于基准对比 |
| 先进先出 (FIFO) | 先调入内存的页先被淘汰 | 可能产生抖动(分配的页数越多,缺页率反而越高) |
| 最近最少使用 (LRU) | 过去最少使用的页面被淘汰 | 基于局部性原理,效率高,不会抖动 |
| 淘汰原则 | 优先淘汰最近未访问的,其次淘汰最近未被修改的 | — |
快表(TLB)
快表要解决什么问题?
分页存储有一个性能硬伤:每次内存访问,实际要访问内存两次。
CPU 读逻辑地址 1040 的数据:
① 先去内存查页表 → 找到页号0对应物理块号5
② 再去内存读物理地址的数据 → 取到 arr[10] 的值
↑↑ 一次读数据 = 两次内存访问,性能直接砍半页表存放在内存中就是慢表,每次地址翻译都多一次内存读取。
快表的核心思想
快表(TLB,Translation Lookaside Buffer)是 CPU 内部的一块小型高速缓存,专门存放最近用过的页表条目。
CPU 读逻辑地址 1040:
先查快表(CPU内部,纳秒级)
├─ ✅ 命中(hit)→ 直接拿到物理块号 → 1次内存读数据
└─ ❌ 未命中(miss)→ 去内存查页表(慢表)→ 拿到映射
→ 写入快表(下次就快了)→ 读数据为什么快表能生效?局部性原理
- 时间局部性:访问了一个地址,短时间内很可能再用(如循环)
- 空间局部性:访问了一个地址,附近地址也很快会被访问(如数组遍历)
所以快表只需几十到几百个条目,就能覆盖 90%~99% 的地址翻译请求。
性能对比
| 场景 | 访问过程 | 性能 |
|---|---|---|
| 无分页 | 1 次内存 | 基准 |
| 慢表(纯内存页表) | 2 次内存 | ❌ 慢一倍 |
| 快表命中 | 1 次快表(≈1ns)+ 1 次内存 | ✅ 接近无分页 |
| 快表未命中 | 1 次内存(页表)+ 1 次内存(数据) | ❌ 退化为慢表 |
一句话:快表 = 页表的 Cache,把最近用的映射放 CPU 旁边,避免每次翻译都去内存翻表。
练习题
某系统页面大小为 4K,进程页面变换表如下,逻辑地址为十六进制 1D16H,求物理地址。
| 页号 | 物理块号 |
|---|---|
| 0 | 1 |
| 1 | 3 |
| 2 | 4 |
| 3 | 6 |
答案与解析
答案:3D16H
核心原理:页内偏移不动,页号查表替换成物理块号。
分页地址转换的本质是逻辑地址 → 物理地址时,页内偏移直接搬运,只有页号被替换。因为页面大小就是物理块大小,页内偏移在逻辑地址和物理地址中是相同的。
步骤拆解:
① 页面大小 4K = 2^12 → 页内偏移占 12 位(低 12 位),剩余高位是页号
② 拆分 1D16H:
1D16H = 0001 1101 0001 0110
↑___ ↑________________
页号1 页内偏移 D16H- 低 12 位 = D16H(页内偏移,直接保留)
- 高 4 位 = 1(逻辑页号,待映射)
③ 查页表:页号 1 → 物理块号 3(页号被替换)
④ 拼物理地址:物理块号 3 + 页内偏移 D16H = 3D16H
验证公式:物理地址 = 物理块号 × 页面大小 + 页内偏移
3 × 4096 + D16H = 3 × 1000H + D16H = 3000H + D16H = 3D16H某进程 4 个页面(0~3),分配 3 个存储块,访问前页面 1 不在内存。根据状态位/访问位/修改位,淘汰哪个页面代价最小?

答案与解析
答案:3
解析:淘汰原则—优先淘汰最近未被访问的,再淘汰最近未被修改的。页 0、2、3 最近都被访问过,但只有页 3 最近未被修改,淘汰代价最小。
[Q48] 分页存储
分页存储管理中,地址转换需要读取( )。
- A. 链表
- B. 段表
- C. 页表
- D. 段表+页表
答案与解析
答案:C
解析:分页管理中,逻辑地址→物理地址通过查页表完成。
[Q56] 缺页中断
以下情况会触发缺页中断(Page Fault)的是( )。
- A. 进程访问的页在物理内存中
- B. 进程访问的页被标记为只读
- C. 进程访问的页既不在内存也不在磁盘
- D. 进程访问的页不在物理内存但存在于磁盘
答案与解析
答案:D
解析:缺页=页不在内存但在磁盘,需要调入。A 正常访问;B 是保护异常;C 是非法访问。
[Q63] 物理地址
在页式存储管理中,以下哪种地址类型用于程序运行时在内存中的实际定位( )。
- A. 逻辑地址
- B. 物理地址
- C. 虚拟地址
- D. 相对地址
答案与解析
答案:B
解析:物理地址=内存中实际地址;逻辑地址/虚拟地址=程序中的地址,需转换。
[Q105] 缺页中断类型
当CPU要访问的页面不在内存中时,会引发(1)中断,系统处理该中断的过程称为(2)。
- A. 外部中断
- B. 内部中断
- C. 软中断
- D. 缺页中断
答案与解析
答案:D
解析:访问的页不在内存中→缺页中断(Page Fault)。
[Q106] 页面置换
当CPU要访问的页面不在内存中时,会引发(1)中断,系统处理该中断的过程称为(2)。
- A. 页面置换
- B. 页面调入
- C. 地址变换
- D. 页面分配
答案与解析
答案:A
解析:缺页中断发生后,处理过程 = 页面置换(选一页换出→调入所需页)。各选项辨析:
| 选项 | 是什么 | 和缺页处理的关系 |
|---|---|---|
| A. 页面置换 | 缺页时选一页换出、调入新页的完整过程 | ✅ 正确答案,就是中断处理过程本身 |
| B. 页面调入 | 从磁盘读页面进内存 | ❌ 只是置换中的一个动作环节,缺了"换出"不完整 |
| C. 地址变换 | MMU把逻辑地址翻译成物理地址 | ❌ 它是每次内存访问都做的,缺页时它只是触发者,不是处理者 |
| D. 页面分配 | 决定进程拥有多少个物理页框 | ❌ 属于内存管理策略,不参与缺页中断处理 |
关系图:
地址变换(C)→ 发现页不在内存 → 触发缺页中断
↓
页面置换(A)
├─ 选一页换出
└─ 页面调入(B)← 读入目标页