我对如何在双向关联缓存上访问数据感到困惑。
例如,C = ABS
C = 32KB
A = 2
B = 32bits
S = 256
offset = lg(B) = 5
index = lg(S) = 8
tag = 32 - offset - index = 19
说我有以下地址
tag | index | offset
1000 0000 0000 0000 000|0 0000 000|1 0000
1000 0000 0000 0000 000|0 0000 000|0 0000
1000 0000 0000 0000 000|0 0000 000|1 1010
我的缓存看起来像
index valid dirty tag data valid dirty tag data
0: 1 0 0x80... some data1 1 0 0x80... some data2
1: . .
2: . .
3: . .
当索引和标记位相同时,如何确定两个缓存数组中的哪一个应该从(data1 vs data2)获取数据?
同样,当我需要使用相同的索引和标记位更新缓存时,如何确定我应该将两个数组中的哪些数据踢出来?
我认为它与偏移位有关,但我不太清楚如何使用偏移位或它们在缓存数组中表示或映射到底是什么。