MESI协议缓存一致性问题:为何部分写操作被标记为Exclusive而非Modified
MESI协议示例状态疑问解答
前置条件回顾
考虑包含P1、P2两个核心的系统,采用write back和write allocate策略。
地址A1和A2映射到同一个缓存块,但A1不等于A2。初始缓存状态为无效,采用MESI协议。
执行步骤如下:
- P1向A1写入值10
- P1读取A1的值
- P2读取A1的值
- P2向A1写入值20
- P2向A2写入值40
- P1读取A1的值
核心疑问解释
你看到的步骤1、步骤4后缓存块为Exclusive而非Modified,核心原因是状态表的统计时机是总线交互阶段完成后、本地写入动作执行前的瞬时状态,并非整个写操作全部完成后的最终状态,结合MESI协议的规则具体解释如下:
步骤1状态为Exclusive的原因
首先回忆Write Allocate策略下写未命中的处理流程,以及Exclusive状态的定义:
- Exclusive状态的核心判定规则是:仅当前核心持有该缓存块的有效副本,且副本内容与主存完全一致,尚未被修改
- 步骤1P1发起A1写请求时,缓存初始为无效,触发写未命中,Write Allocate策略会先执行总线交互阶段:
- P1向总线发送
BusRdX(独占读请求),申请该缓存块的独占所有权 - P2检查自身缓存,无该块的有效副本,返回无副本信号
- 主存将A1对应的完整缓存块返回给P1,存入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
相关产品推荐
相关产品推荐

