【发布时间】:2016-11-30 16:15:27
【问题描述】:
首先,第一个缓存有 16 个单字块。例如,我将使用 0x03 内存引用。索引有 4 位 (0011)。很明显,位等于 3mod16 (0011 = 0x03 = 3)。但是,我对使用这个 mod 方程来确定缓存中的块位置以及偏移位感到困惑。
第二个缓存的总大小为八个双字块。这意味着有 1 个偏移位。由于现在有 8 个块,因此只有 3 个索引位。作为示例,我将采用相同的内存引用 0x03。但是现在我无法使用我之前使用的 mod 方程映射到块。我尝试 3mod8 是 3,但是在这种情况下,由于存在偏移位,因此索引位是 001。001 不等于 3,所以我做错了什么?当有偏移位时,mod 不起作用吗?我的印象是 mod 方程总是等于索引位。
【问题讨论】:
-
你必须修改索引,而不是整个地址。
-
我有点困惑。我认为索引是到块的映射:S
-
我的意思是你必须修改偏移量以上的位才能获得索引。 (即删除标签位)。偏移位对地址映射到缓存中的哪一行没有影响,因此它们/它当然不是计算的一部分。
-
我还是有点困惑 :( 偏移量 (LSB) 之前的位不包括索引位和标记位吗?我书中的声明说“块由(块地址)模(缓存中的块数)”。我猜“块”不等于索引?
-
黑色位置不总是等同于索引吗?我一直认为索引是块位置地址。
标签: caching memory cpu-architecture cpu-cache