Appearance
虚拟存储器(硬件视角)
考情分析
虚存的硬件机制在组成原理和操作系统中都有考查,408 大题常以虚实地址转换结合 Cache 的形式出现,是跨章节综合题的重点。
虚拟地址与物理地址
程序使用虚拟地址(逻辑地址),硬件将其翻译为物理地址后才能访问主存。
虚拟地址结构(分页机制):
页大小
页表
页表存储在主存中,由操作系统管理。每个进程有一张页表。
页表项(PTE)包含:
| 字段 | 说明 |
|---|---|
| 物理帧号(PFN) | 对应的主存物理帧地址 |
| 有效位(Present) | 该页是否在主存中 |
| 脏位(Dirty) | 该页是否被修改 |
| 访问位(Referenced) | 最近是否被访问(用于页面替换) |
| 保护位 | 读/写/执行权限 |
翻译过程:
或等价于:物理帧号替换虚页号,offset 不变。
多级页表
32 位地址空间,4 KB 页,单级页表需要
两级页表:将 VPN 分为两段,页目录(L1)+ 页表(L2),按需分配,大幅节省空间。
64 位系统通常用 4 级页表(x86-64 用 PML4/PDPT/PD/PT)。
TLB(快表)
问题:每次地址翻译都要访问主存中的页表,访问主存一次翻译 + 一次数据,效率低下。
TLB(Translation Lookaside Buffer,快表/地址翻译缓存):Cache 化的页表,存放最近使用的页表项,容量小(64~1024项),速度极快(SRAM)。
TLB 通常采用全相联映射,每次查找并行比较所有项的 VPN 标记。
地址翻译流程(含 TLB)
虚拟地址
↓
查 TLB(极快)
↓
TLB 命中?
是(TLB Hit)→ 直接得到物理地址
否(TLB Miss)→ 查主存页表 → 得到物理地址 → 更新 TLB
↓
用物理地址访问数据
↓
查 Cache
↓
Cache 命中?
是 → 从 Cache 返回数据
否 → 访问主存,装入 Cache完整的 TLB + Cache + 主存 联合访问
访问一个数据,最多需要:
- 查 TLB(命中)→ 得到物理地址 或 查 TLB 未命中 → 访问主存页表 → 更新 TLB
- 查 Cache(命中)→ 得到数据 或 Cache 未命中 → 访问主存 → 装入 Cache
四种组合情况:
| TLB | Cache | 访存次数 | 性能 |
|---|---|---|---|
| Hit | Hit | 0(或极少) | 最快 |
| Hit | Miss | 1(取数据) | 快 |
| Miss | Hit | 1(取页表项)+ 0 | 中 |
| Miss | Miss | 1(取页表项)+ 1(取数据) | 最慢 |
注意:TLB Miss 且 Cache Miss 时,实际上还可能有多次主存访问(多级页表)。
交互可视化
地址翻译计算例题
例1
32 位虚拟地址,4 KB 页(
- 虚拟地址:
(实际高位 = 32-12 = 20位,但只用低20位) - 物理地址:
(16-12 = 4位帧号)
若虚拟地址为 0x00003204(二进制:0...011 0010 0000 0100):
- offset = 低12位 =
0x204= 516 - VPN = 高位 =
0x3= 3
查页表,假设第 3 项的帧号为 0x6,则:
考点清单
- 虚拟地址 = VPN + offset,物理地址 = PFN + offset(offset 不变)
- TLB 是页表的 Cache,全相联映射,用 VPN 作标记
- TLB Hit + Cache Hit 是最理想情况(实际上大部分访问都是这种)
- 多级页表按需分配,节省主存空间
- 缺页(Valid=0)由操作系统处理,属于操作系统考点
- 组成原理重点:TLB 结构、地址翻译硬件流程、与 Cache 的结合