总线嗅探机制
把所有的读写请求都通过总线(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:代表已修改(
任意一对缓存,对应缓存行的相容关系:
比如: 当块标记为 M
(已修改), 在其他缓存中的数据副本被标记为 I
(无效).
参考:https://zh.wikipedia.org/wiki/MESI协议
by 斯武丶风晴 https://my.oschina.net/langxSpirit