SMP缓存一致性

本文介绍了SMP系统中缓存一致性的重要性,详细解析了MESI协议及其四种状态,以及处理器间通信的消息类型。通过一个实例展示了数据在多核处理器间如何保持一致,并指出即使是原子变量操作也有开销。最后,提出了‘伪共享’问题,鼓励读者深入思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.anger6.com/?p=641

在阅读linux相关源码的过程中,经常看到内存屏障相关原语,如mb(),rmb(),wmb等。要想理解这些原语的作用,有必要理解SMP缓存一致性原理。

在SMP系统中,处理器的每个核都有独立的一级缓存,因此同一内存位置的数据,可能在多个核一级缓存中存在多个副本,所以存在数据一致性的问题。目前主流的缓存一致性协议是MESI协议及其衍生协议。

原生的MESI协议有4种状态:

  • M(Modify)修改:表示数据只存在本地处理器缓存的在副本,数据是脏的,即数据被修改过,还没有写回内存。
  • E(Exclusive)独占:表示数据只存在本地处理器缓存的副本,数据是干净的,即副本和内存中的数据相同。
  • S(Shared)共享:表示数据存在多个处理缓存的副本,数据是干净的,即所有副本和内存中的数据相同。
  • I(Invalid)无效:表示缓存行中没有数据。

为了维护缓存一致性,处理器之间需要通信,MESI协议提供了以下消息:

  • Read读:包含想要读取的缓存行的物理地址。
  • Read Response读响应:包含读消息请求的数据。读响应消息可能是由内存控制器发送的,也可能是由其他处理器的缓存发送的。如果一个处理器的缓存行有想要的数据,并且处于修改状态,那么必须发送读响应消息。
  • Invalidate使无效:包含想要删除的缓存行的物理地址。所有其他处理器必须从缓存行中删除对
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

self-motivation

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

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

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

打赏作者

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

抵扣说明:

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

余额充值