You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MESI协议缓存一致性问题:为何部分写操作被标记为Exclusive而非Modified

MESI协议示例状态疑问解答

前置条件回顾

考虑包含P1、P2两个核心的系统,采用write back和write allocate策略。
地址A1和A2映射到同一个缓存块,但A1不等于A2。初始缓存状态为无效,采用MESI协议。
执行步骤如下:

  1. P1向A1写入值10
  2. P1读取A1的值
  3. P2读取A1的值
  4. P2向A1写入值20
  5. P2向A2写入值40
  6. P1读取A1的值

核心疑问解释

你看到的步骤1、步骤4后缓存块为Exclusive而非Modified,核心原因是状态表的统计时机是总线交互阶段完成后、本地写入动作执行前的瞬时状态,并非整个写操作全部完成后的最终状态,结合MESI协议的规则具体解释如下:

步骤1状态为Exclusive的原因

首先回忆Write Allocate策略下写未命中的处理流程,以及Exclusive状态的定义:

  • Exclusive状态的核心判定规则是:仅当前核心持有该缓存块的有效副本,且副本内容与主存完全一致,尚未被修改
  • 步骤1P1发起A1写请求时,缓存初始为无效,触发写未命中,Write Allocate策略会先执行总线交互阶段:
    • P1向总线发送BusRdX(独占读请求),申请该缓存块的独占所有权
    • P2检查自身缓存,无该块的有效副本,返回无副本信号
    • 主存将A1对应的完整缓存块返回给P1,存入P1的缓存中
  • 此时总线交互阶段完成,P1是唯一持有该块的核心,块内容和主存完全一致,刚好符合Exclusive状态的定义,这就是状态表中记录的状态。后续P1执行本地写入将A1改为10、标记脏位后,状态才会变为Modified,这一步是本地操作无总线事务,未被统计在该状态表的对应节点中。

步骤4状态为Exclusive的原因

步骤3完成后,P1和P2的A1缓存块均为Shared状态,此时P2发起A1写请求的处理流程如下:

  • P2的缓存命中但块状态为Shared,无修改权限,因此向总线发送BusRdX申请独占所有权
  • P1收到BusRdX请求后,将自身的A1缓存块标记为无效,确认让出所有权
  • 主存返回最新的A1缓存块(步骤3读操作时已经同步了主存内容,此时块内容与主存一致)给P2
  • 总线交互阶段完成后,P2是唯一持有该块的核心,块内容和主存完全一致,因此标记为Exclusive状态,后续执行本地写入将A1改为20后,状态才会变为Modified。

内容的提问来源于stack exchange,提问作者Megan Darcy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:54:03