1

我已经阅读了很多关于 MESI 协议及其用于保持缓存一致的应用的文献,但有两个细节我不太清楚:

当使用 MESI 协议保持多个缓存同步并为缓存行应用 LRU 策略时,缓存中的行是仅通过读访问还是通过写访问保存的?

另外,我看对了吗:缓存 A 中共享行上的缓存命中不会按照缓存 B 的 LRU 顺序显示该行?

4

1 回答 1

0

如果您谈论的是回写类型的缓存,则需要区分缓存读/写操作和 CPU 看到的加载/存储。加载和存储都将执行读取操作(其中存储可能使用稍微不同的风格,称为 read-for-ownership,它本质上保证核心独占获取行并且可以将其标记为 M 状态)。原因是大多数存储不会覆盖缓存行的整个宽度,因此必须将它们覆盖的部分合并到数据的最新有效副本中。因此,在这样的系统上,加载和存储都相当于读取并在缓存中分配行。分配的任何此类行都会更新 LRU。

高速缓存写操作通常与从上级高速缓存到低级高速缓存的回写相关联。LRU 机制与高速缓存一致性本身是正交的,并且仅在需要空间时选择必须写回哪些行(通常用于需要分配的读取行)。

至于第二个问题——同样,LRU 和 MESI 是正交的。侦听另一个缓存并命中处于共享状态的行的缓存查找会将其保留在那里或使其无效(取决于访问类型)。如果该行被单独留下(用于简单的读取,然后也会在缓存 A 中分配处于共享状态的行),则缓存 B 中的行可能会被触及(其 LRU 已更新)或不被触及 - 取决于实现。它不影响连贯性。

于 2014-09-29T16:02:32.623 回答