MESI协议:Cache 一致性协议
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 总线嗅探机制 把所有的读写请求都通过总线( Bus )广播给所有的 CPU 核心,然后让各个核心去“嗅探”这些请求,再根据本地的情况进行响应。 MESI 协议 基于 写失效 ( Write Invalidate ) 如果某个 CPU 核心 写入一个 Cache Line,则会广播一个 失效 请求告诉所有其他的 CPU 核心。 Cache Line 的 标记 M:代表已修改( Modified ) 缓存行是脏的( dirty ),与主存的值不同。如果别的CPU内核要读主存这块数据,该缓存行必须回写到主存,状态变为共享( S ). E:代表独占( Exclusive ) 缓存行只在当前缓存中,但是干净的( clean )--缓存数据同于主存数据。当别的缓存读取它时,状态变为共享( S );当前写数据时,变为已修改( M )状态。 S:代表共享( Shared ) 缓存行也存在于其它缓存中且是干净( clean )的。缓存行可以在任意时刻抛弃。 I:代表已失效( Invalidated ) 缓存行是脏的(dirty),无效的。 任意一对缓存,对应缓存行的相容关系: 比如: 当块标记为 M (已修改), 在其他缓存中的数据副本被标记为 I (无效). 参考: https://zh.wikipedia.org/wiki