一:背景
缓存一致性算法是为了解决多核处理器之前独占缓存的缓存一致性问题而提出的。
现代计算机架构,根据成本和IO速度将存储分为了寄存器、l1/l2/l3cache、ssd、hdd等多种存储介质,其中在多核处理器中,由于每个处理器有自己的l1/l2cache,那么如何保证多个处理器之间的l1/l2cache的数据一致性成为了一个问题。
并且如何保证cache尽可能少的和主存进行读写也是一大问题。
二:概念
在了解MESI协议之前,我们需要知道几个概念:
- cache:这里特指处理器的l1\l2缓存,因为这两个是处理器独享的。
- bus:总线,可以监听每个处理器cache的读写操作。由于本次总线监听不是重点,这里我们只需要知道总线可以知道每个处理器cache的读写操作,并且可以把这种操作进行广播就可以了。
- 处理器对cache的操作:分为读/写两种;此时不同cache根据自身的状态不同,可能会进行两种操作:总写读\总线写。
- 总线的操作:总线的操作分为总线读和总线写(在这里为了简单,我们不区分总线写入已有cache和未有cache),同时不同的cache根据此时自身的状态可能会选择忽略总线操作,或者是接受总线操作然后进行状态更改。
- 写回操作(write back):cache将自身的数据写入到主存当中。
此处借用一下知乎@兰新宇的图片,原文链接:https://zhuanlan.zhihu.com/p/94811032
可以从此图看到处理器、cache、总线以及主存之间的关系。
三:cache line状态
cache line的具体概念这里就不细说了,可以理解为ca