Skip to content

考点清单

  • [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,求物理地址。

页号物理块号
01
13
24
36
📝答案与解析

答案: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)← 读入目标页