Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 当直接映射缓存中存在偏移量时,如何将内存地址映射到块?_Caching_Memory_Cpu Architecture_Cpu Cache - Fatal编程技术网

Caching 当直接映射缓存中存在偏移量时,如何将内存地址映射到块?

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,那么我

首先,第一个缓存有16个单字块。例如,我将使用0x03内存引用。索引有4位(0011)。很明显,这些位等于3mod16(0011=0x03=3)。然而,使用这个mod方程来确定块在缓存中的偏移位置,我感到困惑


第二个缓存的总大小为八个双字块。这意味着有1个偏移位。因为现在有8个块,所以只有3个索引位。作为一个例子,我将采用相同的内存引用0x03。然而,现在我很难使用我以前使用的mod方程映射到块。我尝试3mod8,它是3,但是在这种情况下,由于有一个偏移位,索引位是001。001不等于3,那么我做错了什么?有偏移位时mod不工作吗?我的印象是mod方程总是等于索引位。

都在地址中。您得到地址,然后从结尾屏蔽掉位数,原因如下

  • 缓存行中的字数。如果你有2字缓存线(去掉一点,4字-2个bts等)
  • 那么您有多少缓存线条目。(如果是1024缓存线,则提取10位。这10位是索引,其余位用于标记)
  • 现在,你也需要考虑“方法”。如果它是一个直接映射缓存,则上述内容适用。如果是双向集合关联缓存,则没有1024行,即512个块,每个块中有2行。这意味着您只需要9位来确定块的索引。如果是4路,则有256个块,其中有4行,这意味着您的索引只需要8位

    在集合关联缓存中,索引用于选择块,一旦选择了块,use可以使用类似LRU的策略来填充条目,以防缓存未命中。点击通过比较选定块中的标记来确定


    总之,块的位置不是由地址决定的,只有一个块由地址选择,然后通过比较其标记来查找数据。

    它的全部在地址中。您得到地址,然后从结尾屏蔽掉位数,原因如下

  • 缓存行中的字数。如果你有2字缓存线(去掉一点,4字-2个bts等)
  • 那么您有多少缓存线条目。(如果是1024缓存线,则提取10位。这10位是索引,其余位用于标记)
  • 现在,你也需要考虑“方法”。如果它是一个直接映射缓存,则上述内容适用。如果是双向集合关联缓存,则没有1024行,即512个块,每个块中有2行。这意味着您只需要9位来确定块的索引。如果是4路,则有256个块,其中有4行,这意味着您的索引只需要8位

    在集合关联缓存中,索引用于选择块,一旦选择了块,use可以使用类似LRU的策略来填充条目,以防缓存未命中。点击通过比较选定块中的标记来确定


    归根结底,块的位置不是由地址决定的,只有一个块是由地址选择的,然后通过它的标签比较来找到数据。

    你必须修改索引,而不是整个地址。我有点困惑。我认为索引是块的映射:SI的意思是你必须修改偏移量以上的位才能得到索引。(即移除标记位)。偏移位对地址映射到缓存中的哪一行没有影响,因此它们/它当然不是计算的一部分。我仍然有点困惑:(偏移(LSB)之前的位不包括索引位和标记位吗?我书中的语句说“块由(块地址)模给出(缓存中的块数)”。我猜是“块”不是等同于索引吗?黑色位置不总是等同于索引吗?我总是觉得索引是块位置地址。你必须修改索引,而不是整个地址。我有点困惑。我认为索引是块的映射:我的意思是你必须修改偏移量上方的位才能得到索引(即删除标记位)。偏移位对地址映射到缓存中的哪一行没有影响,因此它们/它当然不是计算的一部分。我仍然有点困惑:(偏移(LSB)之前的位不包括索引位和标记位吗?我书中的语句说“块由(块地址)模(缓存中的块数)”。我猜“块”不等于索引?黑色位置不总是等于索引吗?我总是觉得索引就是块位置地址。