Appearance
题目
下列关于 TLB 和 Cache 的叙述中,错误的是( )。
错因
A
误以为 TLB 和局部性无关——以为局部性只针对数据/指令访问,TLB 是地址翻译。但TLB 缓存的是页表项——程序如果在小范围内连续访问(即数据有空间/时间局部性),就主要落在少数页里,对应的页表项也只有少数几个,TLB 命中率高。所以 TLB 命中率也与局部性有关。A 是对的叙述。
B
误以为 TLB 缺失访问 Cache。但 TLB 缺失意味着对应页表项不在 TLB 中 → 必须查完整页表——而页表在主存里。所以 TLB miss 后访问的是主存(页表所在位置),不是 Cache。B 是对的叙述(Cache miss 当然也要访问主存)。
C
误以为 TLB 缺失必须由软件处理。早期 RISC 是软件处理,但现代 x86 / ARM 的 TLB 缺失由硬件 page table walker 自动处理——硬件按页表项格式遍历多级页表,更新 TLB。所以"缺失处理可由硬件实现"是对的叙述(可字明示"能力上")。
总解析
TLB 和 Cache 对比:
| 维度 | TLB(Translation Lookaside Buffer) | Cache |
|---|---|---|
| 缓存内容 | 页表项(虚→物地址映射) | 主存数据 / 指令 |
| 实现介质 | SRAM(全相联或多路组相联) | SRAM |
| 缺失后访问 | 页表(在主存) | 主存 |
| 缺失处理者 | 硬件 / 软件均可 | 硬件 |
| 命中率与局部性 | 程序的页面局部性 | 数据/指令的时空局部性 |
逐项判断:
| 选项 | 叙述 | 判断 | 理由 |
|---|---|---|---|
| A | 命中率都与局部性有关 | ✓ 对 | TLB 受页面局部性影响;Cache 受时空局部性影响 |
| B | 缺失后都需访问主存 | ✓ 对 | TLB miss 查页表(主存);Cache miss 直接读主存 |
| C | 缺失处理都可由硬件实现 | ✓ 对 | 现代 x86/ARM TLB miss 由硬件 page walker 处理 |
| D | 都由 DRAM 组成 | ✗ 错 | 两者都由 SRAM 实现 |
D 为什么错——TLB 和 Cache 都用 SRAM:
| 介质 | 速度 | 集成度 | 用在哪 |
|---|---|---|---|
| SRAM | 极快(CPU 周期级) | 低(每位 6 个晶体管) | Cache、TLB、CPU 内部寄存器 |
| DRAM | 慢(几十到几百纳秒) | 高(每位 1 晶体管 + 1 电容) | 主存 |
TLB 和 Cache 必须能在 1 个 CPU 周期内响应(否则 CPU 流水线会阻塞),DRAM 几十纳秒的延迟显然不够——只能用 SRAM。DRAM 因为容量大、便宜,作为主存使用。
最终答案是 D(错误的叙述)。
SRAM vs DRAM 速记:
| 维度 | SRAM | DRAM |
|---|---|---|
| 单元结构 | 6 个晶体管的触发器 | 1 晶体管 + 1 电容 |
| 速度 | 几纳秒 | 几十纳秒 |
| 集成度 | 低 | 高 |
| 是否需要刷新 | 不需要 | 需要(电容漏电) |
| 单位价格 | 贵 | 便宜 |
| 典型用途 | Cache、TLB、寄存器 | 主存 |
易错点速查:
- TLB 和 Cache 都是 CPU 内/旁的高速缓存,两者都用 SRAM
- 现代硬件 TLB miss 处理已是标配(page table walker),早期 RISC 才走软件路径
- TLB 与"页面局部性"挂钩;Cache 与"时空局部性"挂钩——都依赖局部性