直接映射的缓存示例

时间:2019-12-29 09:58:33

标签: caching assembly cpu-architecture cpu-cache

我一直对直接映射缓存这个主题感到困惑,我一直在寻找一个很好的解释示例,这让我比以往更加困惑。

例如:我有

  • 2048字节内存
  • 64字节大缓存
  • 8字节缓存行 使用直接映射的缓存时,如何确定“ LINE”,“ TAG”和“字节偏移”?


  • 我相信寻址位的总数是11位,因为2048 = 2 ^ 11

  • 2048/64 = 2 ^ 5 = 32个块(0至31)(需要5位)(标记)

  • 64/8 = 8 = 2 ^ 3 = 3位用于索引

  • 8个字节的缓存行= 2 ^ 3,这意味着我需要3位的字节偏移量

所以地址是这样的:标记为5,索引为3,字节偏移为3

我是否正确找到了?

1 个答案:

答案 0 :(得分:1)

我能正确找到吗?

说明

1)主存储器大小为2048字节= 2 11 。因此,您需要11位来寻址一个字节(如果您的字长为1个字节)[word =将通过该地址访问的最小单个单元]

2)您可以通过这样做来计算直接映射中的标签位(主内存大小/现金大小)。但是我将解释更多有关标签位的信息。

在这里,现金行的大小(始终与主内存块的大小相同)为8个字节。这是2 3 个字节。因此,您需要3位来代表Cashe行中的一个字节。现在,地址中还剩下8位(11-3)。

现在,缓存中存在的总行数为(cashe大小/行大小)= 2 6 / 2 3 = 2 3

因此,您有3位代表所需字节所在的行。

现在剩余位数为5(8-3)。

这5位可用于表示标签。 :)

3)3位用于索引。如果您尝试标记将一行表示为索引所需的位数。是的,你是对的。

4)3位将用于与高速缓存行一起访问一个字节。 (8 = 2 3

所以

11位总地址长度= 5个标记位+ 3位代表一行+ 3位代表一行中的一个字节(字)

希望现在没有混乱。