Appearance
题目
某计算机的 Cache 共有 16 块,采用 2 路组相联映射方式(即每组 2 块)。每个主存块大小为 32 字节,按字节编址。主存 129 号单元所在主存块应装入到的 Cache 组号是( )。
错因
A
把"块号 mod 组数"误写成"块号 ÷ 组数"。算到主存块号 = 4 是对的,但 4 ÷ 8 = 0(整除),就把 0 当组号交了。组相联里,确定 Cache 组号永远是 mod 运算(块号取余组数),不是除法。
B
把字节地址直接 mod 组数:,跳过了"先按块大小算块号"这一步。在按字节编址、块大小 32 B 的体系里,必须先 把字节地址映射到主存块号,再 mod 组数。
D
混淆了组数公式。常见误算:把每组的"路数 2"加到块号上(4 + 2 = 6),或者用错的组数公式(如 之类)。组数计算只有一个固定公式:。
总解析
组相联映射的三步流程(按字节编址下,主存某字节地址 → Cache 组号):
| 步骤 | 公式 | 本题代入 |
|---|---|---|
| ① 算 Cache 组数 | ||
| ② 字节地址 → 主存块号 | ||
| ③ 块号 → Cache 组号 |
地址结构示意(组数 = 8 → Index 3 位;块大小 32 字节 → Offset 5 位;Tag 占剩下高位):
把 129 写成二进制:
- 低 5 位(Offset): → 块内第 1 字节
- 中 3 位(Index): → 组号 = 4
- 高位(Tag):
最终答案是 C(组号 4)。
易错速记:组相联映射的组号 = 主存块号 mod 组数。"先把字节地址转成块号、再 mod"——少一步就会错位。