MESI:缓存一致性协议

MESI:缓存一致性协议#

  • 背景:多核CPU有各自的高速缓存,对于同一主存数据修改后,访问时会有不一致问题。MESI就是为了解决多核CPU高速缓存访问同一主存数据一致性。

  • 概念:

    • MESI(Modified Exclusive Shared Or Invalid):是一种广泛使用的支持写回策略的缓存一致性协议。

    • Write through(写通):每次CPU修改了cache中的内容,Cache立即更新内存的内容

    • Write back(写回):内核修改cache的内容后,cache并不会立即更新内存中的内容,而是等到这个cache line因为某种原因需要从
      cache中移除时,cache才会更新内存中的内容。

      1. Write through(写通)由于有大量的访问内存的操作,效率太低,大多数处理器都使用Writeback(写回)策略,在一定程度上减少了总线带宽压力。
      2. Cache如何知道这行有没有被修改?需要一个标志-dirty标志。Dirty标志为1,表示cache的内容被修改,和内存的内容不一致,当该cache line被移除时,数据需要被更新到内存,dirty标志位0(称为clean),表示cache的内容和内存的内容一致。
  • 状态:CPU中每个缓存行(caceh line)使用4种状态进行标记(使用额外的两位(bit)表示):

状态 独占 与主存一致 备注
Modified(被修改) 缓存行中的内存需要在未来的某个时间点(允许其它CPU读取请主存中相应内存之前)写回(write back)主存
Exclusive(独占的) 该状态可以在任何时刻当有其它CPU读取该内存时变成共享状态(shared)
Shared(共享的) 当有一个CPU修改该缓存行中,其它CPU中该缓存行可以被作废(变成无效状态(Invalid))。
Invalid(无效的) 该缓存是无效的(可能有其它CPU修改了该缓存行)。

MESI 协议的状态图

img

参考#

MESI&MOESI协议

MESI--CPU缓存一致性协议

《大话处理器》Cache一致性协议之MESI

既然CPU有缓存一致性协议(MESI),为什么JMM还需要volatile关键字?

10 张图打开 CPU 缓存一致性的大门

正确理解MESI协议

posted @   FynnWang  阅读(335)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示