我正在练习缓存,我偶然发现了一个问题,内容如下:
具有 16 位地址的字节可寻址系统附带三路集关联、回写 缓存(即每个块都需要一个脏位)。缓存实现真正的 LRU 替换策略,使用 实现它所需的最小替换策略位数,这意味着它需要 3 每组位数。标记存储总共需要 264 位存储空间。 缓存的块大小是多少? (提示:264 = 28 + 23 也请不要忘记,除了标签本身,每个块需要 1 有效位,1 个脏位)。
我有解决方案,这非常令人困惑,因为我的教授在谷歌文档上写了这个并将其发送给我们。尽管如此,它看起来像:
> t -> tag, n -> index, b-block
16 =t+n +b
LRU- 3 bit/set -> 2" set
LRV -> 3 x 2" cache blocks
Dirty bit -> (1) x 3 x 2"
Valid bit- (1)x 3x2"
tag store -> tag -> tx3 blocks per set = (2^n) blocks
total size: tag + dirty + valid + LRU
=tx3x(2^n) + (1)x3x(2^n) + (1)x3x(2^n) (1)+ 3x(2^n)
=(2^n)(3t +3+3+3)
=(9+3t)(2^n) = 264 = 2^8 + 2^3 //This is the hint given
=2^3(2^5+1)
2^n(9 +3t) =2^3(2^5+1)
2^n = 2^3
n = 3
and he somehow did 2^5 = 32, and provided us with the answer 32.
我对收到的回复感到非常困惑,我希望 Stack Overflow 用户可以帮助我理解如何解决这个问题,或者解释我提供的答案是怎么回事。
如果你确实解决了这个问题,我还想问一个后续问题,那就是是否有任何通用的公式来查找缓存大小/块大小,比如
x+y = z
类型的公式,或者我是否必须形成一个我自己?
谢谢。