如果我有
32位地址
,
缓存大小(c)8 KB
,
块大小(b)16 B
,
设置关联性(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
仍然困惑我将如何计算缓存大小或此缓存将包含多少行?
答案 0 :(得分:3)
您的互联网搜索为您提供了正确的答案。
对于32位地址,如果4位用于块偏移,9则用于索引,这意味着标记需要剩余的19位。
由于这是直接映射高速缓存,因此替换策略(例如LRU)不需要任何位。你的有效性至少需要一位。使用2位,您可以实现像MESI这样的缓存一致性算法。因此每个块需要20到21位。