MESI协议-缓存一致性协议

Posted YoungerChina

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MESI协议-缓存一致性协议相关的知识,希望对你有一定的参考价值。

MESI协议-缓存一致性协议

        MESI协议是Cache line四种状态的首字母的缩写,分别是修改(Modified)态、独占(Exclusive)态、共享(Shared)态和失效(Invalid)态。Cache中缓存的每个Cache Line都必须是这四种状态中的一种。

  • 修改态(M):如果该Cache Line在多个Cache中都有备份,那么只有一个备份能处于这种状态,并且“dirty”标志位被置上。拥有修改态Cache Line的Cache需要在某个合适的时候把该Cache Line写回到内存中。但是在写回之前,任何处理器对该Cache Line在内存中相对应的内存块都不能进行读操作。Cache Line被写回到内存中之后,其状态就由修改态变为共享态。
  • 独占态(E):和修改状态一样,如果该Cache Line在多个Cache中都有备份,那么只有一个备份能处于这种状态,但是“dirty”标志位没有置上,因为它是和主内存内容保持一致的一份拷贝。如果产生一个读请求,它就可以在任何时候变成共享态。相应地,如果产生了一个写请求,它就可以在任何时候变成修改态。
  • 共享态(S):意味着该Cache Line可能在多个Cache中都有备份,并且是相同的状态,它是和内存内容保持一致的一份拷贝,而且可以在任何时候都变成其他三种状态。
  • 失效态(I):该Cache Line要么已经不在Cache中,要么它的内容已经过时。一旦某个Cache Line被标记为失效,那它就被当作从来没被加载到Cache中。

       对于某个内存块,当其在两个(或多个)Cache中都保留了一个备份时,只有部分状态是允许的。如下表所示,横轴和竖轴分别表示了两个Cache中某个Cache Line的状态,两个CacheLine都映射到相同的内存块。如果一个Cache Line设置成M态或者E态,那么另外一个Cache Line只能设置成I态;如果一个Cache Line设置成S态,那么另外一个Cache Line可以设置成S态或者I态;如果一个Cache Line设置成I态,那么另外一个Cache Line可以设置成任何状态。

MESI中两个Cache备份的状态矩阵

       那么,究竟怎样的操作才会引起Cache Line的状态迁移,从而保持Cache的一致性呢?以下所示是根据不同读写操作触发的状态迁移表:

以上是关于MESI协议-缓存一致性协议的主要内容,如果未能解决你的问题,请参考以下文章

MESI协议-缓存一致性协议

MESI协议-缓存一致性协议

算法优化:缓存一致性协议MESI

三:CPU缓存一致性协议MESI

MESI缓存一致性协议

并发编程MESI--CPU缓存一致性协议