理解内存屏障-从缓存一致性协议MESI说起

文章详细介绍了多核CPU环境下缓存一致性问题,通过解析MESI协议的四种状态和两类请求,阐述了缓存一致性的重要性。讨论了Store Buffer和Invalidate Queue在优化中的角色,以及内存屏障如何解决由此产生的可见性问题,强调了在并发编程中应对一致性挑战的必要性。
摘要由CSDN通过智能技术生成

一、背景

CPU在执行任务时会频繁读写内存中的数据,等待内存数据的读写完成是耗时操作,会拖慢CPU的运行速度。

所以一般在CPU上都集成了比内存更快的高速缓存。CPU会尽量多与高速缓存打交道,即将数据从主内存加载到缓存,后续对这个数据的操作在缓存内进行,再适时将缓存数据刷入主内存,以此提高CPU任务执行效率。

但这也带来了问题,在多核心的情况下,多核心操作同一数据时都将数据加载到自己的缓存中,后续某个核心对该数据的修改在刷入主内存前对其它核心是不可见的,这就带来了一致性问题。

缓存一致性协议就是为了解决这种问题发明的,MESI协议是支持写回(write-back)缓存的常用协议, 也称为伊利诺伊协议。现代CPU使用的缓存一致性协议很多都是在MESI的基础上发展而来的。

二、原始MESI解读

1.四种状态

MESI协议中,缓存有四种状态:

  • M(modified) 已修改: 缓存行已被修改

  • E(exclusive) 独占: 缓存行只被该核心缓存(因为是独占的,修改数据不需要问其它核心)

  • S(shared) 共享: 缓存行被多个核心缓存(不能直接写,需要通知其它核心)

  • I(invalid) 失效: 缓存行失效(读取时要从其它缓存或主内存读)

2.两类请求

(1)处理器读写请求

一类是处理器对缓存的请求,包括读请求和写请求。

  • PrRd:处理器请求读缓存。

  • PrWr:处理器请求写缓存。

(2)总线请求

处理器之间、处理器与主内存之间通过Bus(总线)交换事件和数据。

  • Bus:可以理解为多核心之间、核心与内存之间交流的一个通道。

  • Bus Snooping:用来监听总线事件。

前面提到的处理器对缓存的读、写请求会根

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值