CPU缓存一致性协议:MESI

今天在看《架构解密》的时候,看到一段介绍CPU缓存一致性的介绍,文章详细解析了Intel多核处理器是如何解决数据一致性问题的,这本书在2020年看过一遍,现在又拿出来学习,感觉要学习的知识还有很多,关于CPU的多核协作的可以看看原先写的一篇文章《多线程开发中Cache伪共享问题及@Contended的使用》里面有关多核协作的简单介绍。

MESI

MESI协议是基于Invalidate的高速缓存一致性协议,并且是支持回写高速缓存的最常用协议之一。 它也被称为伊利诺伊州协议(由于其在伊利诺伊大学厄巴纳 - 香槟分校的发展)。 回写高速缓存可以节省很多通常在写入缓存上浪费的带宽。 回写高速缓存中总是存在脏状态,表示高速缓存中的数据与主存储器中的数据不同。 如果块驻留在另一个缓存中,则Illinois协议要求缓存在未命中时缓存传输。 该协议相对于MSI协议减少了主存储器事务的数量。 这标志着性能的显着改善。- 来源于百度百科

MESI状态

在MESI协议中,每个Cache line有4个状态,可用2个bit表示

M ModifiedE ExclusiveS SharedI Invalid
修改状态独享状态共享状态无效状态
M: 被修改(Modified)

在这里插入图片描述

该缓存行只被缓存在该CPU(核1)的缓存中,并且是被修改过的(核1的cache line),即与主存中的数据不一致,该缓存行中的内存需要在未来的某个时间点(允许其它CPU(核2)读取(第①步)主存中相应内存之前)写回(第②步)主存,然后重新读取(第③步)。当被写回主存之后,该缓存行的状态会变成独享(exclusive)状态。

E: 独享的(Exclusive)

在这里插入图片描述

该缓存行只被缓存在该CPU的缓存中,它是未被修改过的(核1的cache line),与主存(memory)中数据一致。该状态可以在任何时刻当有其它CPU(核2)读取该内存时变成共享状态(shared)。同样地,当CPU修改该缓存行中内容时,该状态可以变成Modified状态。

S: 共享的(Shared)

在这里插入图片描述

该状态意味着该缓存行可能被多个CPU缓存,并且各个缓存中的数据与主存数据一致(clean),当有一个CPU修改该缓存行中,

其它CPU中该缓存行可以被作废(变成无效状态(Invalid))。

I: 无效的(Invalid)在这里插入图片描述

该缓存(核1 核2的cache line)是无效的(可能有其它CPU(核3)修改了该缓存行)。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里藍天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值