了解直接映射缓存

时间:2014-04-20 05:35:44

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

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

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

要求CPU从RAM存储器地址1100100111获取数据。但是,CPU不直接从RAM中的该存储器地址访问数据。 RAM将此数据存储到高速缓冲存储器,然后CPU从高速缓冲存储器中获取数据。

有不同的方法,一种是直接映射缓存。高速缓冲存储器和RAM存储器被分成块,其中每个存储器中的块中的单元数必须相同。 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中,并将此块中的标记更新为{ {1}}。 CPU现在可以获取此块中的数据。

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

Memory Address

谢谢!

1 个答案:

答案 0 :(得分:3)

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

你的理解似乎很好。还有一点需要指出缓存块是否有效。与联想的东西祝你好运!