假设主存容量为1M×16位,Cache容量为8K×16位,块长为8个16位的字,访存地址为字地址,则在直接映射[1]方式下,缓存字块地址是()为。A,10B,13C,9D,8
假设主存容量为1M×16位,Cache容量为8K×16位,块长为8个16位的字,访存地址为字地址,则在直接映射[1]方式下,缓存字块地址是()为。
A,10
B,13
C,9
D,8
题目解答
答案
计算主存地址空间[2]中地址的总位数。由于有1M个字,我们需要计算
个地址,所以地址的总位数是20位。
接下来,我们需要计算块内偏移(Block Offset)的位数。因为每个块包含8个字,所以需要3位来表示块内的偏移8。
现在,我们需要计算主存块地址的位数。由于块长是8个字,我们需要将主存地址空间大小除以块长来得到块的数量。所以,块地址的位数是 20−3=17 位。
我们需要计算缓存行地址的位数。因为缓存容量是8K,所以行地址的位数是13位。
在直接映射中,缓存行地址(Cache Index)和块地址(Block Address)是分开的。块地址由索引(Index)和标记(Tag)组成。在这个问题中,我们只关心索引部分,因为索引决定了缓存块的位置。
答案选择为B.
解析
考查要点:本题主要考查Cache地址映射方式中的直接映射机制,涉及主存地址结构、块偏移、索引和标记的划分。
解题核心思路:
- 确定主存地址总位数:根据主存容量计算地址位数。
- 划分块内偏移:根据块长确定块内偏移的位数。
- 计算主存块地址位数:总地址位数减去块内偏移位数。
- 确定Cache索引位数:根据Cache容量和块长计算Cache行数,进而得到索引位数。
- 直接映射规则:主存块地址的索引部分唯一对应Cache行。
破题关键点:
- 主存地址总位数:1M字对应20位地址。
- 块内偏移:块长8字需3位表示。
- 主存块地址:20-3=17位。
- Cache行数:8K字/8字/块=1K行,需10位索引。
- 缓存字块地址:索引(10位)+块内偏移(3位)=13位。
步骤1:计算主存地址总位数
主存容量为1M×16位,即$2^{20}$个字,因此地址总位数为:
$\log_2(2^{20}) = 20 \text{位}$
步骤2:确定块内偏移位数
块长为8个字,需用$\log_2 8 = 3$位表示块内偏移。
步骤3:计算主存块地址位数
主存块地址位数为主存总地址位数减去块内偏移位数:
$20 - 3 = 17 \text{位}$
步骤4:计算Cache索引位数
Cache容量为8K×16位,块长8字,因此Cache行数为:
$\frac{8K}{8} = 1K = 2^{10} \text{行}$
索引位数为:
$\log_2(2^{10}) = 10 \text{位}$
步骤5:确定缓存字块地址位数
在直接映射中,缓存字块地址由索引(10位)和块内偏移(3位)组成,总位数为:
$10 + 3 = 13 \text{位}$