Appearance
题目
某计算机按字节编址,采用页式虚拟存储管理方式,虚拟地址为 32 位,主存地址为 30 位,页大小为 1KB。若 TLB 共有 32 个表项,采用 4 路组相联映射方式,则 TLB 表项中标记字段的位数至少是( )。
错因
A
可能是把"TLB 32 项"当成了"32 个组"(漏看了 4 路组相联):组数 = 32 → 组号位数 = → 标记 = 22 − 5 = 17。错点是没区分"项"和"组"——4 路组相联意味着每组有 4 项,组数 = 项数 / 路数 = 32 / 4 = 8,组号占 3 位,不是 5 位。
B
把"4 路"直接当成"组号位数"——做 22 − 4 = 18。这是对组相联结构的常见误读:"4 路"是每组的项数,不是地址域里组号的位数。组号位数取决于组数,由 决定。组数 = 32 / 4 = 8 → 组号 3 位 → 标记 = 22 − 3 = 19,不是 18。
D
可能是把"主存地址 30 位 − 页内偏移 10 位 = 20 位"的物理页号当成了 TLB 标记。TLB 标记字段对应的是"虚拟"页号去掉组号后的高位,不是物理页号——TLB 用虚拟地址查找,标记必须由虚拟页号产生(22 − 3 = 19)。物理页号在 TLB 表项的"数据"部分(命中后输出)里,不在"标记"字段里。
总解析
TLB 表项的标记字段位数 = 虚拟页号位数 − 组号位数
逻辑:组相联映射下,虚页号被劈成"组号 + 标记"两部分——组号决定查哪一组,标记用来在组内 4 路中精确匹配。
第一步:求虚拟页号位数
- 虚拟地址 = 32 位
- 页大小 = 1 KB = B → 页内偏移 = 10 位
- 虚拟页号 = 32 − 10 = 22 位
第二步:求组号位数
- TLB 共 32 项
- 4 路组相联 → 每组 4 项 → 组数 = 32 / 4 = 8
- 组号位数 = 3 位
第三步:把虚页号劈成"标记 + 组号"
最终答案是 C(19)。
通用公式速记:
| 量 | 公式 |
|---|---|
| 页内偏移 | |
| 虚拟页号 | 虚拟地址位数 − 页内偏移 |
| 组数 | TLB 项数 ÷ 路数 |
| 组号位数 | |
| TLB 标记位数 | 虚页号位数 − 组号位数 |
易错点:
- "项"≠"组"——n 路组相联下,组数 = 项数 / 路数
- TLB 标记看的是虚拟页号,不是物理页号(物理页号是 TLB 表项的"数据"部分而非"标记"部分)
- 路数(n)≠ 组号位数;组号位数 =