首先,第一个缓存有16个单字块。作为一个例子,我将使用0x03内存引用。索引有4位(0011)。很明显,位等于3mod16(0011 = 0x03 = 3)。不过,我正在使用这个mod方程式来弄糊涂,以确定具有偏移位的缓存中的块位置。当直接映射缓存中存在偏移量时,如何将内存地址映射到块?
第二个高速缓存的总大小为八个双字块。这意味着有1个偏移位。由于现在有8个块,所以只有3个索引位。作为一个例子,我将采用与0x03相同的内存引用。但是现在我无法使用之前使用的mod方程映射到块。我尝试3mod8这是3,但在这种情况下,由于有一个偏移位,索引位是001。001不等于3,所以我做错了什么?有偏移位时,mod不工作吗?我的印象是,mod方程总是等于索引位。
你必须修改索引,而不是整个地址。 –
我有点困惑。我认为索引是映射到块:S –
我的意思是说你必须修改偏移量以上的位来获得索引。 (即去除标签位)。偏移位不影响地址映射到缓存中的哪一行,因此它们/它不是计算的一部分。 –