缓存一致性协议之MESI

缓存一致性协议之MESI

缓存一致性协议

在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存 (MainMemory)。基于高速缓存的存储交互很好地解决了处理器与内存的速度矛盾,但是 也引入了新的问题:缓存一致性(CacheCoherence)。当多个处理器的运算任务都涉及同一 块主内存区域时,将可能导致各自的缓存数据不一致的情况,如果真的发生这种情况,那同步 回到主内存时以谁的缓存数据为准呢?为了解决一致性的问题,需要各个处理器访问缓存时都 遵循一些协议,在读写时要根据协议来进行操作,这类协议有MSI、 MESI(IllinoisProtocol)、MOSI、Synapse、Firefly及DragonProtocol,等等
在这里插入图片描述

MSEI

在这里插入图片描述
M:修改(Modified)
E:独占(Exclusive)
S:共享(Shared)
I:无效(Invalid)

E:独占(Exclusive)

如果cpu1来读主内存中的变量x ,首先先把x读到cpu缓存中去,与此同时就把X置为独占状态X(E),此刻cpu1也在时刻监听总线当中其他cpu对主内存的操作
在这里插入图片描述

S:共享(Shared)

假设,在cpu1缓存还没有回写到到主存当中来的时候 ,cpu2也想从主存当中把x读到它的缓存中去,这时候x通过总线传输到了cpu2的缓存中去了,与此同时cpu1通过了总线的时刻监听(嗅探机制嗅探其他的cpu有没有读取主存中的x),嗅探到了cpu2也将x到了他的缓存中去了,这时候就把X的状态改为了共享的状态X(S)
在这里插入图片描述

M:修改(Modified)

cpu1将它的缓存当中的X读到寄存器中经过计算,计算完后回写回来,这个时候cpu1缓存中的X就变成了2(经过了加1计算),接下来准备把计算的结果回写到主存当中去 ,首先要锁住缓存行把他变成X(M)状态,然后向总线发消息(告诉总线我已经把它锁住了,并准备把修改后的X写回到主存当中去)

在这里插入图片描述

I:无效(Invalid)

此刻其他的cpu也一直在监听总线的消息,此时cpu2嗅探到了这个消息,cpu2就把它的缓存中的X所在的缓存行标记为了X(I)无效状态
在这里插入图片描述
然后cpu1接着把X=2回写到主存中来
在这里插入图片描述
回写完后,cpu1又把它的缓存中的X的状态改为了X(E)又变成了一个独占的状态
在这里插入图片描述
此时cpu2中X的状态是无效的状态,如果还想对X进行访问的话,那么它需要把它之前的缓存行中的X丢弃掉,重新去内存中把修改后的X=2通过总线读取到缓存中去,
在这里插入图片描述
于此同时cpu1又通过了总线的时刻监听(嗅探机制嗅探其他的cpu有没有读取主存中的x),嗅探到了cpu2又将X到了它的缓存中去了,这时候就又把X的状态改为了共享的状态X(S)
在这里插入图片描述

什么时候缓存一致性协议会失效

1.如果说x的存储长度大于一个缓存行,只能加效率更低的总线锁
2.cpu并不支持缓存一致性协议

cpu锁的最小存储单元叫做缓存行
失效是整个缓存行失效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值