【发布时间】:2020-04-18 11:09:21
【问题描述】:
我对直接映射缓存这个话题真的很困惑,我一直在寻找一个有很好解释的例子,这让我比以往任何时候都更加困惑。
例如:我有
- 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 代表字节偏移
我是否正确理解了这一点?
【问题讨论】:
-
是的。不过,我发现将标签的长度作为地址宽度(11 位)和索引+偏移位(3+3)之间的差异更合乎逻辑:11-6 = 5。当然,这两种方法都是等价的。
-
我也推荐@MargaretBloom 提出的方法,因为它也适用于非直接映射缓存。如果在此示例中,您在 4 组中有相同的 8 行,则标记位数将为 6(11 - 3 - 2),而不是 5。
标签: caching assembly cpu-architecture cpu-cache