多核处理器cache一致性

多核处理器cache一致性实现

对于多核处理器,每个核都有独立cache,通过一致性协议来维护一个有限状态机,根据存储器读写指令或总线上的传输,进行状态迁移和相应的cache操作来保证cache一致性。cache一致性协议主要有两大类别,一类是监听协议(Snooping Protocol),每个cache都要被监听或者其它cache的总线活动;另外一类是目录协议(Directory Protocol),全局统一管理cache状态。所谓cache一致性,就是使内存状态对于所有核都是一样的。

MESI协议定义

状态描述
M(修改态)cache行数据有效,数据被修改,和内存中的数据不一致,数据只存在本cache中
E(独占态)cache行数据有效,数据和内存中的数据一致,数据只存在本cache中
S(共享态)cache行数据有效,数据和内存中的数据一致,多个cache行存在该数据副本
I(无效态)cache行数据无效

MESI状态说明(图片来源于《奔跑吧Linux内核》)
MESI状态说明图
上图中说明了MESI的转换关系,通过有限状态机来实现cache一致性。后来的MOESI协议增加了一个O(Owned)状态,并在MESI协议的基础上重新定义了S状态,其余状态不变。

下面举例说明MESIMOESI的不同之处,假定一个数据存在于两个核的cache行内,且都是对数据进行了读操作,那么此时两个cache的状态为S,如果其中一个核对该空间进行了写操作,按照MESI协议的状态转换表,那么本核cache状态编程M,而另一个核变为I,如果另一个核去读数据,则两个核最终又会变成S,且cache行内容与内存一致。MOESI协议针对上述操作的最终结果是,修改的那个核的cache状态为O,而另一个读数据的cache状态为S,两个cache中的数据都是最新数据,但是与内存中数据不一致。总结下来就是对于S状态,在MESI协议下,内存与cache内容一致,在MOESI协议下,如果所有cache状态都是S,那么cache与内存内容一致,如果有一个cache状态为O,而其它核cache状态为S,则所有cache都是最新的,且与内存内容不一致。(注:这里所说的不一致,并不是指出现了问题,而是当前cache和内存的状态,当cache命中时,cache中的内容是有效的)

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值