直接映射缓存示例



>我对直接映射缓存这个话题真的很困惑,我一直在寻找一个有很好解释的例子,这让我比以往任何时候都更加困惑。

例如:我有

  • 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( 主内存大小为 2048 字节 = 211。所以你需要 11 位来寻址一个字节(如果你的字大小是 1 个字节([word = 将使用地址访问的最小单个单位]

2(您可以通过do(主要内存大小/现金大小(在直接映射中计算标签位。但是我将解释更多关于标签位的信息。

这里,cashe 行的大小(总是与主记忆块的大小相同(是 8 个字节。 即 23个字节。因此,您需要 3 位来表示 cashe 行中的一个字节。现在地址中还剩下 8 位 (11 - 3(。

现在缓存中存在的行总数为 (cashe 大小/行大小( = 26/23= 23

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

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

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

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

4( 3 位将用于访问缓存行内的字节。(8 = 23(

所以

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

希望现在没有混乱。

最新更新