Caching 当直接映射缓存中存在偏移量时,如何将内存地址映射到块?
首先,第一个缓存有16个单字块。例如,我将使用0x03内存引用。索引有4位(0011)。很明显,这些位等于3mod16(0011=0x03=3)。然而,使用这个mod方程来确定块在缓存中的偏移位置,我感到困惑Caching 当直接映射缓存中存在偏移量时,如何将内存地址映射到块?,caching,memory,cpu-architecture,cpu-cache,Caching,Memory,Cpu Architecture,Cpu Cache,首先,第一个缓存有16个单字块。例如,我将使用0x03内存引用。索引有4位(0011)。很明显,这些位等于3mod16(0011=0x03=3)。然而,使用这个mod方程来确定块在缓存中的偏移位置,我感到困惑 第二个缓存的总大小为八个双字块。这意味着有1个偏移位。因为现在有8个块,所以只有3个索引位。作为一个例子,我将采用相同的内存引用0x03。然而,现在我很难使用我以前使用的mod方程映射到块。我尝试3mod8,它是3,但是在这种情况下,由于有一个偏移位,索引位是001。001不等于3,那么我
第二个缓存的总大小为八个双字块。这意味着有1个偏移位。因为现在有8个块,所以只有3个索引位。作为一个例子,我将采用相同的内存引用0x03。然而,现在我很难使用我以前使用的mod方程映射到块。我尝试3mod8,它是3,但是在这种情况下,由于有一个偏移位,索引位是001。001不等于3,那么我做错了什么?有偏移位时mod不工作吗?我的印象是mod方程总是等于索引位。都在地址中。您得到地址,然后从结尾屏蔽掉位数,原因如下
总之,块的位置不是由地址决定的,只有一个块由地址选择,然后通过比较其标记来查找数据。它的全部在地址中。您得到地址,然后从结尾屏蔽掉位数,原因如下
归根结底,块的位置不是由地址决定的,只有一个块是由地址选择的,然后通过它的标签比较来找到数据。你必须修改索引,而不是整个地址。我有点困惑。我认为索引是块的映射:SI的意思是你必须修改偏移量以上的位才能得到索引。(即移除标记位)。偏移位对地址映射到缓存中的哪一行没有影响,因此它们/它当然不是计算的一部分。我仍然有点困惑:(偏移(LSB)之前的位不包括索引位和标记位吗?我书中的语句说“块由(块地址)模给出(缓存中的块数)”。我猜是“块”不是等同于索引吗?黑色位置不总是等同于索引吗?我总是觉得索引是块位置地址。你必须修改索引,而不是整个地址。我有点困惑。我认为索引是块的映射:我的意思是你必须修改偏移量上方的位才能得到索引(即删除标记位)。偏移位对地址映射到缓存中的哪一行没有影响,因此它们/它当然不是计算的一部分。我仍然有点困惑:(偏移(LSB)之前的位不包括索引位和标记位吗?我书中的语句说“块由(块地址)模(缓存中的块数)”。我猜“块”不等于索引?黑色位置不总是等于索引吗?我总是觉得索引就是块位置地址。