8GB内存64位可寻址字长直接映射缓存位计算及公式有效性咨询
直接映射缓存的地址位计算问题解答
问题描述
某计算机配备8GB内存,采用64位可寻址字长,内存每块存储16个字,且拥有128块的直接映射缓存。请计算标记位(tag bits)、行号位(Line number bits)和偏移位(offset bits)。
原解法及错误分析
8GB = 1GW(64位字长=8字节/字),需要
30 bits (log₂1G = 30)。内存地址分为行号和字编号,每行16个字,因此块偏移需要4位。接着,由于每块存储16个字,缓存要存储128块则需16行,故line number bits 4(log₂16 = 4),标记位为30-4-4=22位。
原解法不正确,核心错误是对缓存行数的理解偏差:直接映射缓存中,缓存的行数等于其可容纳的块数(题目明确说明缓存拥有128块,即缓存行数为128),而非通过块大小推导行数。
正确计算步骤
1. 确定内存地址总位数
- 8GB是字节容量,64位字长对应每个字占8字节(64bit=8Byte)
- 总字数 = 8GB / 8Byte = 1G字 = 2³⁰字
- 因此内存地址总位数为
30 bits
2. 计算偏移位(Offset Bits)
- 每块存储16个字,块内需要区分16个不同字单元
- 偏移位数量 = log₂(16) = 4 bits
3. 计算行号位(Line Number Bits)
- 直接映射缓存的行数等于其块数,即128行
- 行号位数量 = log₂(128) = 7 bits
4. 计算标记位(Tag Bits)
- 标记位 = 总地址位 - 行号位 - 偏移位 = 30 - 7 - 4 = 19 bits
关于标记位公式的有效性
公式log₂(main memory size / cache size)是有效的,验证如下:
- 主存大小:1G字 = 2³⁰字
- 缓存大小:128块 × 16字/块 = 2048字 = 2¹¹字
- 主存大小/缓存大小 = 2³⁰ / 2¹¹ = 2¹⁹
- log₂(2¹⁹) = 19 bits,与手动计算的标记位结果完全一致
该公式成立的前提是:主存和缓存的块大小相同(本题满足此条件),此时主存与缓存的容量比值等价于主存块数与缓存行数的比值,而标记位的作用正是区分映射到同一缓存行的不同主存块,因此可直接用该公式计算标记位数量。
内容的提问来源于stack exchange,提问作者AMunim
相关产品推荐
相关产品推荐

