2014-09-29 54 views
1

我看了很长一段文学对MESI协议和其保持高速缓存一致性的应用,但有两个细节我不能完全弄清楚:MESI协议和LRU策略

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

另外,我看到这个权利:高速缓存A中的共享线上的高速缓存命中将不会在高速缓存B的LRU顺序中显示该行?

回答

0

如果你正在谈论写回缓存类型,你需要区分缓存读/写操作和加载/存储,因为CPU看到它们。加载和存储都会执行读取操作(商店可能会使用一种稍微不同的风格,称为“读取所有权”,这基本上保证了内核独占一行并且可以标记为M状态)。原因是大多数商店不覆盖缓存行的整个宽度,因此必须将它们覆盖的部分合并到最新的有效数据副本中。因此,在这样的系统中,加载和存储都将用于读取并在缓存中分配行。任何这样分配的线路都会更新LRU。

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

至于第二个问题 - 再次,LRU和MESI是正交的。侦听另一个缓存并在共享状态下访问一行的高速缓存查找可以将其保留在那里或使其无效(取决于访问类型)。如果该行保持独立(对于简单的读取,然后将其分配给高速缓存A中的共享状态),高速缓存B中的行可能会被触摸(其LRU更新),具体取决于实现。它不影响一致性。