MESI 缓存一致性协议

MESI: 为了保证多个CPU核之间的缓存行中对应主存的数据的一致性。

缓存行的4个状态

M: Modified
代表该缓存行中的内容被修改了,并且该缓存行只被缓存在该CPU中。
并且 这个状态的缓存行中的数据和内存中的不一样,在未来的某个时刻它会被写入到内存中
E: Exclusive
E代表该缓存行对应内存中的内容只被该CPU缓存,其他CPU没有缓存该缓存对应内存行中的内容。这个状态的缓存行中的内容和内存中的内容一致。

该缓存可以在任何其他CPU读取该缓存对应内存中的内容时变成S状态。或者本地处理器写该缓存就会变成M状态。

S: Shared
该状态意味着数据不止存在本地CPU缓存中,还存在别的CPU的缓存中。这个状态的数据和内存中的数据是一致的。

当有一个CPU修改该缓存行对应的内存的内容时会使该缓存行变成 I 状态。

I: Invaild
代表该缓存行中的内容时无效的。

MESI 状态转移图

image

对于MES状态来说,对于I状态来说仍然为I
出现remote write: 该cache line 一定会变成invaild状态。
出现remote write: 该cache line 会变成 Share状态。

对于MESI状态来说,
出现local write: 该cache line 会变成modified状态。

对于MES状态,
出现local read:该cache line 状态不会改变。

对于I状态,
出现local read:

1.如果其他处理器中没有这份数据,本缓存从内存中取该数据,状态变为E

2.如果其他处理器中有这份数据,且缓存行状态为M,则先把缓存行中的内容写回到内存。本地cache再从内存读取数据,这时两个cache的状态都变为S

3.如果其他缓存行中有这份数据,并且其他缓存行的状态为S或E,则本地cache从内存中取数据,并且这些缓存行的状态变为S

转:https://blog.csdn.net/xiaowenmu1/article/details/89705740

posted @   CrazyShanShan  阅读(242)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示