1. 给定两核写同一 cache line 的 MESI 状态迁移过程?
给定两核写同一 cache line 的 MESI 状态迁移过程?
- MESI 状态
- 写同一行
- 状态迁移
假设两核 P0、P1 都缓存了同一 cache line。初始 P0 若独占该行(E 状态),P0 写时无需通知,状态变 M(Modified)。当 P1 想读该行时,P0 在总线响应,把数据转发给 P1,P0 状态从 M 变 S(Shared),P1 得到 S。之后 P1 想写该行,需发出独占请求(invalidate),P0 收到后把状态从 S 变 I(Invalid),P1 独占并把数据从 S 变 M(Modified,可本地写)。若 P0 之后又读,需从 P1 获取,P0 变 S、P1 变 S。核心:写前必须 invalidate 其他副本(M 状态独占),写后 M,读共享变 S,被 invalidate 变 I。
MESI 的核心是"写需独占、读可共享"。写同一行时,持有者升级为 M 并 invalidate 他人,其他人收到 invalidate 变 I。这保证写操作的一致性。