MESI:缓存一致性协议
MESI:缓存一致性协议#
-
背景:多核CPU有各自的高速缓存,对于同一主存数据修改后,访问时会有不一致问题。MESI就是为了解决多核CPU高速缓存访问同一主存数据一致性。
-
概念:
-
MESI(Modified Exclusive Shared Or Invalid):是一种广泛使用的支持写回策略的缓存一致性协议。
-
Write through(写通):每次CPU修改了cache中的内容,Cache立即更新内存的内容
-
Write back(写回):内核修改cache的内容后,cache并不会立即更新内存中的内容,而是等到这个cache line因为某种原因需要从
cache中移除时,cache才会更新内存中的内容。- Write through(写通)由于有大量的访问内存的操作,效率太低,大多数处理器都使用Writeback(写回)策略,在一定程度上减少了总线带宽压力。
- 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 协议的状态图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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保姆级教程