Caching 理解直接映射缓存

Caching 理解直接映射缓存,caching,memory,memory-management,computer-architecture,cpu-cache,Caching,Memory,Memory Management,Computer Architecture,Cpu Cache,我试图理解直接映射缓存,但这是一个非常复杂的概念。到目前为止,我已经写了我认为我理解的东西,但我不确定我是否正确。有人能验证一下下面的解释是否正确吗 例如,对于一台组装好的计算机,为了回答这个问题,RAM中有1024个内存位置(单元)。这等于2^10,因此每个内存位置的地址长度必须为10位 CPU被要求从RAM内存地址1100100111获取数据。但是,CPU不会直接从RAM中的这个内存地址访问数据。RAM将这些数据存储到高速缓存中,然后CPU从高速缓存中获取数据 有不同的方法可以做到这一点,一

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

例如,对于一台组装好的计算机,为了回答这个问题,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位标记数据存储的RAM块号。在这个区块编号中还有另外两个重要编号。首先是缓存块编号;这是该RAM块将存储到的缓存块。这是偏移量后的前2位,因此它将是
00
(2来自缓存中有2^2=4个块的事实)。地址中剩余的2个数字标记标签。这将是
11

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

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

这些都对吗?在我开始尝试理解联想记忆和设置联想记忆之前,我需要理解这一点


谢谢

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


你的理解似乎很好。还有一件事是需要一个位来指示缓存块是否有效。祝你好运

偏移量应该在“块”中标记“单元”位置-每个块有16个这样的单元,因此只需要4位,而不是6位。谢谢您的回答,很抱歉回复太晚。过去几周我复习了很多。我可以问一下,如果
10
是缓存中的块号,并且最重要的四位
1100
是标记,那么这段数据存储在主存储器(RAM)中的块是否在块号
101100
中?否,在这种映射方案中,标记应该在块号之前。内存中块开始的位置是
1100100000
,该块的最后一个单元的位置是
1100101111
。因此,RAM中的块号是
110010
,尽管在主存中引用块号并不典型。这个概念适用于缓存。如果你参考你发布的图表,你会注意到原因。