某32位计算机Cache容量16KB,Cache块大小为16Byte,假设主存与Cache地址映像采用直接映像方式,则主存地址为1234E8F8(十六进制)的单元,装入Cache的地址是( )。
A、00010001001101
B、01000100011010
C、10100011111000
D、11010011101000
根据搜索结果和标准解法,这道软考经典题的正确答案是:
C、10100011111000
✅ 详细解析如下:
已知条件:
- 主存地址:
1234E8F8H(十六进制) - Cache 容量:16 KB = 16×1024=1638416 \times 1024 = 1638416×1024=16384 字节
- 块大小(Cache Line Size):16 Byte
- 映射方式:直接映射
- 地址按字节编址,32位
第一步:计算 Cache 行数 和 地址划分
-
块内偏移(Offset)位数
块大小 = 16 B = 242^424 → Offset = 4 位
-
Cache 总行数
\\frac{16,\\text{KB}}{16,\\text{B}} = \\frac{16384}{16} = 1024 = 2\^{10} → Index = 10 位
-
Tag 位数
32 − 10 − 4 = 18 位
所以主存地址结构为:
[18 位 Tag] [10 位 Index] [4 位 Offset]
第二步:将主存地址 1234E8F8H 转为二进制
逐位转换(每1位十六进制 = 4位二进制):
1 2 3 4 E 8 F 8
0001 0010 0011 0100 1110 1000 1111 1000
拼接成 32 位二进制:
00010010001101001110100011111000
第三步:提取 Index(中间10位)
从右往左:
- 最低 4 位(Offset):
1000 - 接下来 10 位(Index):
1010001111 - 剩余高位(Tag):
000100100011010011
但注意!题目问的是 "装入Cache的地址"。
在软考中,"Cache地址"通常指的是该数据在Cache中的完整地址,即 [Index][Offset] 拼接而成(因为Tag不存储在Cache地址中,而是作为标记比较用)。
✅ 所以 Cache 地址 = Index + Offset = 10 位 + 4 位 = 14 位
我们已经知道:
- Index =
1010001111 - Offset =
1000
拼接得:
1010001111 1000 → 即 10100011111000
第四步:匹配选项
选项 C 正好是:10100011111000
✅ 最终答案:C
📌 关键点:题目问的是"装入Cache的地址",不是"Cache行号",也不是"Tag",而是 Cache内部的实际地址 = Index || Offset(共14位)。
🔔 软考高频考点提醒:
- 直接映射下,Cache地址 = Index + Offset
- Index 决定放在哪一行,Offset 决定在块内的哪个字节
- Tag 用于判断是否命中,不构成Cache地址的一部分
祝你备考顺利,轻松拿下嵌入式系统设计师证书!🎯