MESI 协议

概念

MESI 协议是高速缓存一致性协议,是为了解决多 cpu 、并发环境下,多个 cpu 缓存不一致问题而提出的协议。

协议规定,缓存行在任何时刻一定处于四个状态之一:

  • Modified: 缓存行已经被修改,但是没有被写回主存;
  • Exclusive: 缓存行与主存相同,并且是主存的唯一拷贝;
  • Shared: 和主存系统,可能也存在于其他的缓存中,并不是主存的唯一拷贝;
  • Invalid: 缓存行无效

特点

MESI  是一种基于回写(write-back)、缓存无效化(invalidate)的协议。

回写:本地修改并不会立即同步到主存,而是等到出现 dirty 数据被交换出来时才同步;

缓存无效:一旦某个cpu 发生了本地写,会广播一个 “invalid message”,其它cpu 会将本地缓存重置为无效。

问题

在某个 cpu 发生本地写事件后,需要通过总线发送 invalid message, 等到其他的cpu 回复完成 invalid 各自的本地缓存后,这个cpu 才能真正地修改缓存然后继续向下执行,这个过程是同步阻塞的,也被成为缓存锁。这样做的好处是保证了缓存间的强一致性

图片

优化起来,就是通过缓存、队列来实现异步,提高了效率,但是牺牲了强一致性。

同时 invalid queue 和 store buffer 有溢出的风险。

图片

这个时候如果确实需要强一致性怎么办呢?大家思考一下,下篇文章会给出答案!


如果觉得还不错的话,关注、分享、在看, 原创不易,且看且珍惜~

 

posted on 2021-12-06 17:11  XuHe1  阅读(166)  评论(0编辑  收藏  举报