如果我有一个
32bit address
,
cache size(c) 8 KB
,
Block Size(b) 16 B
,
Set Associativity(a) 1
它是一个直接映射缓存 缓存中每行的位数是多少?包括脏位和有效性位。 缓存中的总行数是多少?
我通过互联网搜索得到的一些想法是
offset bits = log b = 4 bits
index bits = log c/b * 1024 = 9 bits
tag bits = 32 - offset - index = 19 bits
validity and dirty would have 1, 1 bit
仍然对如何计算缓存大小或该缓存有多少行感到困惑?
最佳答案
您的互联网搜索给了您正确的答案。
- block 大小为 16 字节 -> 需要 4 位来指定 block 内的偏移量。
- 8K 字节缓存和 16 字节线 -> 512 个 block 。 (8K/16 = 512)
- 直接映射缓存 -> 512/1 路组关联性 = 512 组
- 512 组 -> 索引需要 9 位 (512 = 2^9)
对于 32 位地址,如果 4 位用于 block 偏移,9 位用于索引,则意味着标记需要剩余的 19 位。
由于这是直接映射缓存,因此替换策略(例如 LRU)不需要任何位。为了保证有效性,您至少需要一位。使用 2 位,您可以实现缓存一致性算法,如 MESI 。因此每个 block 需要 20 到 21 位。
关于caching - 每行缓存位数和总长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26559721/