3. Cache 一致性基础:MESI 协议、MOESI、共享与独占状态

3.1 从一致性问题说起

多核 CPU 里,每个核心都有自己的 L1/L2 cache。你想想看,如果 Core-0 改了某个地址的数据,Core-1 还在用自己缓存里的旧值,那程序跑出来的结果就是错的。这就是缓存一致性问题。

解决这个问题的核心思路,就是让所有缓存行在任意时刻都处于一个「大家都能理解」的状态。谁可以写、谁只能读、谁的数据已经失效——这些信息必须用一套统一的规则来管理。MESI 协议就是这套规则里最经典的一个。

我早期做多核 SoC 验证时,就因为没搞透 MESI 的状态转换,在死锁问题上卡了两周。从那以后我养成了一个习惯:碰到 cache 相关的问题,第一件事就是拿 MESI 状态机画一遍,看每个缓存行到底在哪个状态。

3.2 MESI 的四色牌——四个状态

MESI 用四个状态标记每条缓存行。说白了,每个状态就回答三个问题:这行数据有效吗?我能不能写?别的核有没有副本?

← 上一章📖 返回目录下一章 →
状态 全称 数据有效 可写 其他核有副本