直接映射缓存的例子

4

我对直接映射缓存这个话题非常困惑,我一直在寻找一个有良好解释的例子,但结果比以前更加困惑。

举个例子:

  • 2048字节的内存
  • 64字节的大缓存
  • 8字节的缓存行

    使用直接映射缓存,我应该如何确定“LINE”、“TAG”和“Byte offset”?

  • 我认为寻址位的总数为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位

我理解得正确吗?


2
是的。不过,我认为将标签的长度视为地址宽度(11位)与索引 + 偏移位(3 + 3)之间的差异更为合理:11-6 = 5。当然,这两种方法是等效的。 - Margaret Bloom
我也推荐@MargaretBloom提出的方法,因为它适用于非直接映射高速缓存。如果在这个例子中你有相同的8行数据分成4组,标记位的数量将是6(11-3-2),而不是5。 - Dato
1个回答

3

我理解得对吗?是的

解释:

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

2)通过计算(主存储器大小/高速缓存大小),您可以在直接映射中计算标记位数。但是我将更详细地解释一下标记位。

这里高速缓存行的大小(始终与主存储器块的大小相同)为8字节。 即2 3字节。因此,您需要3位来表示高速缓存行内的一个字节。现在您有8位(11-3)剩余在地址中。

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

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

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

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

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

4)3位将用于访问高速缓存行内的字节。 (8 = 2 3

所以,

11位总寻址长度= 5个标记位+ 3位表示线+ 3位表示行内的字节(字)

希望现在没有混淆了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接