【问题标题】:Understanding Direct Mapped Cache了解直接映射缓存
【发布时间】:2014-06-04 10:08:42
【问题描述】:

我试图理解直接映射缓存,但这是一个非常复杂的概念。我已经写了我认为到目前为止我理解的内容,但我不确定我是否正确。有人可以验证下面的解释是否正确吗?

例如,对于一台组装好的计算机,就这个问题而言,RAM 中有 1024 个内存位置(单元)。这等于 2^10,因此每个内存位置的地址必须是 10 位长。

要求 CPU 从 RAM 内存地址1100100111 获取数据。但是,CPU 不会直接从 RAM 中的该内存地址访问数据。 RAM 将这些数据存储到缓存中,然后 CPU 从缓存中获取数据。

有不同的方法可以做到这一点,一种是直接映射缓存。高速缓冲存储器和随机存取存储器被分成块,其中每个存储器的块中的单元数必须相同。 RAM 和缓存中的块数也必须是 2 的幂。

在此示例中,假设 RAM 中有 2^6 = 64 个块,因此每个块中有 1024/64 = 16 个单元。假设缓存中有 2^2 = 4 个块,因此缓存有 64 个单元。这些数字的指数中的“6”和“2”在以后很重要。

因为 RAM 和缓存中的块数是 2 的幂,所以计算很容易。在我们的地址1100100111 中,最后 6 位标记偏移量100111(6 来自 2^6 = 64 的事实),其余 4 位 1100 标记存储数据的 RAM 块编号。在这个块号中还有另外两个重要的数字。首先是缓存块号;这是该 RAM 块将存储到的缓存块。这是偏移后的前 2 位,因此它将是 00(2 来自缓存中有 2^2 = 4 个块的事实)。地址中剩余的 2 个数字标记标签。这将是11。

因此,当 CPU 被要求从内存地址 1100100111 获取数据时,它会在缓存块号 00 中查找此数据。它将地址 11 的标签与保存在缓存中的标签进行比较,缓存是一块单独的内存,用于存储有关数据来自 RAM 的位置的信息。如果标签相同,这就是命中,这就是 CPU 正在寻找的数据。如果地址的标签和内存中的标签不同,那么这是一个未命中,数据不会存储在缓存中。

如果是这种情况,缓存控制器将从RAM中的块号1100获取数据并将其存储在缓存块号00中,并将此块中的标记更新为11。 CPU 现在可以获取此块中的数据了。

这一切都正确吗?在我开始尝试理解联想和设置联想记忆之前,我需要了解这一点。

谢谢!

【问题讨论】:

  • 偏移量应该标记“块”内的“单元”位置 - 每个块有 16 个这样的单元,因此您只需要 4 位,而不是 6。

标签: caching memory memory-management computer-architecture cpu-cache


【解决方案1】:

你的想法是对的,但你的数字在某个地方出错了。在您的示例中,您有一个直接映射的缓存,每个缓存有 4 个块/行,每个 16 个字节/单元。地址1100100111将被划分如下。您使用最低有效四位 0111 作为偏移量,因为它指的是您想要的特定块的哪个单元格。我认为您不小心将块号作为偏移量的一部分。无论如何,下一个最低有效两位10 将是块号,最高有效四位1100 将是标签。

您的理解似乎很好。还需要一点来指示缓存块是否有效。祝你好运!

【讨论】:

  • 感谢您的回答,很抱歉回复晚了。在过去的几周里,我进行了很多修改。请问,如果10是缓存中的块号,而1100的最高有效四位是标签,那么这条数据存储在主存储器(RAM)中的块是否在?区块号101100 ?
  • 不,在这个映射方案中,标签应该在块号之前。内存中块开始的位置是1100100000,这个块的最后一个单元的位置是1100101111。因此,RAM 中的块号是110010,尽管在主存储器中引用块号并不是很典型。这个概念适用于缓存。
  • 如果您参考您发布的图表,您会注意到原因。
猜你喜欢
  • 2018-06-24
  • 2018-05-24
  • 2020-04-18
  • 2012-07-09
  • 1970-01-01
  • 2015-07-07
  • 2012-04-11
  • 2013-04-02
相关资源
最近更新 更多