虚拟内存 / 缺页中断 / TLB

局部性、请求分页、页表/快表、缺页中断流程、抖动/工作集。

#resource / operating-system #type / concept #status / growing

[!info] related notes 操作系统 MOC 页面置换算法

虚拟内存 / 缺页中断 / TLB

速记结论(背就够用)

  • 虚拟内存的基础:局部性原理
  • 请求分页最常见
  • 缺页中断属于异常(由当前指令引起)
  • 无 TLB 时地址转换常见“两次访存”

1) 虚拟内存是什么

基于局部性原理:程序不必全部装入内存,只装入当前需要的页/段。

2) 局部性原理

  • 时间局部性:刚访问过的很可能再次访问
  • 空间局部性:刚访问过的附近地址很可能被访问

3) 页表与 TLB(快表)

  • 页表:页号 -> 页框号 + 权限/存在位/修改位/引用位…
  • TLB:页表缓存,加速地址转换

笔试高频:两次访存

  • 无 TLB:访问页表一次 + 访问数据一次
  • 有 TLB:命中通常可视为一次主存访问(忽略 TLB 代价);未命中仍需查页表

TLB 命中/未命中的访存次数题型

常见简化假设:忽略 TLB 访问时间。

  • TLB 命中:只访问一次主存(直接拿到页框号并访问数据)
  • TLB 未命中:访问页表一次 + 访问数据一次(两次主存访问)

如果题目要求计算有效访存时间(EAT),通常形式是:

EAT = hitRate * (TLBHitCost) + (1-hitRate) * (TLBMissCost)

按题目给的“TLB 查找时间/主存访问时间”代入即可。

3.5) 分页 / 分段 / 段页式(对比表)

对比项分页分段段页式
划分依据固定大小(物理单位)按逻辑模块(大小不定)先分段再分页
用户可感知通常不可感知可感知(段号/段表)部分可感知
碎片可能内部碎片可能外部碎片内部碎片为主
地址结构页号 + 页内偏移段号 + 段内偏移段号 + 页号 + 页内偏移
访存次数(朴素)2 次(页表 + 数据)2 次(段表 + 数据)3 次(段表 + 页表 + 数据)
常见加速TLBTLBTLB

4) 缺页中断(异常)

访问页不在内存 -> 缺页中断:

  1. 判断是否在外存
  2. 找空闲页框或置换
  3. 调入目标页
  4. 更新页表/TLB
  5. 重新执行指令

易错点:缺页中断属于异常(由当前指令引起),不是外设中断。

5) 抖动(颠簸)

页框太少导致频繁缺页,大部分时间都在换页,CPU 利用率下降。

例题(速记)

例 1:两次访存(无 TLB)

在请求分页中,一次逻辑地址访问通常需要:

  1. 查页表得到页框号
  2. 访问目标数据

所以常见结论是“两次访存”。

例 2:EAT 计算(有 TLB)

假设:主存访问 100ns,TLB 查找 10ns,TLB 命中率 90%。

  • 命中:10 + 100 = 110ns
  • 未命中:10 + 100(查页表)+ 100(取数据)= 210ns

EAT = 0.9110 + 0.1210 = 120ns

创建于 2026/3/16 更新于 2026/5/27