微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在缓存块的标签字段中找到位数

如何解决如何在缓存块的标签字段中找到位数

我在课堂上有这个问题。

“主存有2048个字节,总缓存大小为64个字节,其中一共8个块。每个缓存块的标签字段是多少位?”

我该如何解决这个问题?我查看了堆栈溢出的所有内容,我能找到的所有答案都涉及使用我无法获得的信息或使用从未在课堂上教过的方法,例如使用对数。

解决方法

  1. 以 m 位为单位计算每个地址的大小。如果主存有 2048 个字节,那么我们有 2048=2^m 个唯一地址。这可以计算为 log2(2048) = 每个地址 11 位。 (2^11=2048)

  2. 根据块中的字节数计算位偏移 n。 64 字节/8 块 = 每块 8 字节。 2^n=8,或 log2(8)。所以n=3,块偏移为3位。

  3. 计算集合索引s。由于我们没有被告知,假设这是一个直接映射缓存。这意味着我们有 8 个集合,每个集合中有 1 个块。 2^s=8,或 log2(8)=3。所以 s=3。

  4. 最后,我们知道标签位数是 T=m-s-n。因此当m=11,s=3,n=3时,T=11-6=5。

总共有 5 个标记位。

除非您可以在头脑中计算 2^m=2048,否则您将不得不使用对数。我尝试以两种方式显示每个计算,以便您可以看到发生了什么。计算 log2(2048) 时,这与 2^m=2048 相同。

如果我认为我们在同一个班级的假设是正确的,请查看 CSAPP 书中的 6.4。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。