我正在尝试了解直接映射缓存,但这是一个非常复杂的概念。到目前为止,我已经写了我认为我理解的内容,但我不确定我是否正确。有人可以验证下面的解释是否正确吗?
例如,对于一台组合计算机,仅仅是为了这个问题,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现在可以获取此块中的数据。
这一切都正确吗?在开始尝试理解关联和设置关联记忆之前,我需要先理解这一点。
谢谢!
答案 0 :(得分:3)
你有正确的想法,但你的数字在某处出错了。在您的示例中,您有一个4块/行的直接映射缓存,每行16字节/单元。地址1100100111
将按如下划分。您使用最低有效四位0111
作为偏移量,因为它指的是您想要的特定块的哪个单元格。我认为你不小心将块号作为偏移量的一部分。无论如何,下一个最低有效两位10
将是块编号,最高有效四位1100
将是标记。
你的理解似乎很好。还有一点需要指出缓存块是否有效。与联想的东西祝你好运!