某计算机主存地址为32位,Cache数据容量为64KB,块大小为64B,采用二路组相联映射。忽略有效位等附加信息,主存地址中的Tag、组索引和块内偏移位数依次为()。
块大小64B=2^6B,所以偏移6位。Cache行数为64KB÷64B=1024行;二路组相联每组2行,因此有512组=2^9组,组索引9位。Tag=32-9-6=17位。
选项分析
正确。Tag 17位、组索引9位、块内偏移6位,合计32位。
错误。10位是直接按1024行计算得到,忽略二路相联后每组含2行。
错误。8位组索引对应256组,与题目容量和二路条件不符。
错误。把组索引和块内偏移的位置及位数颠倒。
本题为什么容易错
“64KB除64B等于1024”这一步没错,错在1024是Cache行数,不是二路组相联的组数。每组容纳两行,组数还要再除2。
简短答案
32位地址、64KB Cache、64B块、二路组相联时Tag有多少位,正确答案是 A(17位、9位、6位)。块大小64B=2^6B,所以偏移6位。Cache行数为64KB÷64B=1024行;二路组相联每组2行,因此有512组=2^9组,组索引9位。Tag=32-9-6=17位。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 17位、9位、6位 | 本题正确答案 | 正确。Tag 17位、组索引9位、块内偏移6位,合计32位。 | 看到题干核心场景时优先联想到它 |
| 16位、10位、6位 | 本题干扰项 | 错误。10位是直接按1024行计算得到,忽略二路相联后每组含2行。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 18位、8位、6位 | 本题干扰项 | 错误。8位组索引对应256组,与题目容量和二路条件不符。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 17位、6位、9位 | 本题干扰项 | 错误。把组索引和块内偏移的位置及位数颠倒。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 16位、10位、6位:错误。10位是直接按1024行计算得到,忽略二路相联后每组含2行。
- 18位、8位、6位:错误。8位组索引对应256组,与题目容量和二路条件不符。
- 17位、6位、9位:错误。把组索引和块内偏移的位置及位数颠倒。
知识点详解
组相联Cache中,主存块先由组索引定位到唯一一组,再比较该组各路的Tag。提高相联路数会减少组数和Index位数,增加同组候选位置;块大小不变时Offset位数不变。
备考速记
块定偏移,路数分行成组,剩下全归Tag。
Cache 在计算机组成原理场景中的作用
本题若改为四路组相联,组数变为256,Index为8位,Tag为18位。用这种改参对比,比单独背答案更容易掌握规律。
同类题怎么考
- 计算组相联Cache的组数和地址字段。
- 比较直接映射、全相联与组相联的索引位变化。
Cache 在软件设计师软考中的考法
题目给容量、块大小和相联路数时,先写公式:组数=Cache容量÷块大小÷路数。后面只做以2为底的位数换算。
解题思路
按三个小问题算:一块多大决定Offset,多少组决定Index,剩余才是Tag。64B对应6位;64KB里有1024块,二路意味着两块一组,所以只有512组,对应9位;最后32-6-9=17,选A。
考点定位
先求总行数,再除以相联路数得到组数。最常见的错误是把1024行直接当成1024组。
易错提醒
- 把64KB写成64000B,导致不是2的幂。
- 相联路数乘到组数上,而不是用总行数除以路数。
- 把Tag存储开销计入题干给出的数据容量,混淆题意。
备考提示
- 固定顺序:Offset看块,Index看组,Tag做减法。
- 算完检查三段位数之和是否等于地址总位数。
你可能还想了解
- 二路组相联的组数怎么算?
- 64B块为什么是6位偏移?
- 相联路数增加时Tag位怎么变?
本文小结
64KB Cache含1024个64B行,二路组相联得到512组;Offset 6位、Index 9位,32位地址剩余17位为Tag。