缓存一致性协议
简介
缓存一致性协议是为了解决多核以及多处理器的多个缓存之间的数据不一致提出来的,缓存一致性协议分为两种,第一种是基于窥探的协议(snoop-based),第二种是基于目录的协议(directory-based),基于窥探的协议在共享总线上广播一致信息,基于目录的协议能更好地扩展。MESI协议是基于目录的协议,本文主要讲述MESI协议。
MESI协议
MESI协议为cache block定义了四种状态,分别是Modified(M),Exclusive(E),Shared(S)和Invalid(I)。
- Modified状态:当前cache block的内容与内存不同,是脏的(dirty),并且只有一个core拥有这个cache block的副本
- Exclusive状态:当前cache block的内容与内存一致,是干净的(clean),并且只有一个core拥有这个cache block的副本
- Shared状态:当前cache block的内容与内存一致,是干净的(clean),但是不止一个core拥有这个cache block的副本
- Invalid状态:当前cache block的内容过时(无效)
举个不那么恰当的例子:
比如说现在有一个project,需要四个人(core)参与到coding工作,为了版本控制,我们将代码传到github(内存)上,四个人分别是甲乙丙丁,对应着core0,core1,core2和core3,每个人都有自己的计算机(local cache),平时在自己的计算机上coding。
现在,假设甲从github(内存)上下载(load)了某一个类文件(cache block)到他的计算机(甲的local cache),而乙丙丁的计算机并没有这个类文件(cache block)的副本,这时候甲独占着这个类文件的副本,并且和github(内存)上一样,所以此时这个类文件的状态是exclusive。
假设这时候丁也从github上下载了这个类文件到他的计算机上,这时候,这个类文件在甲和丁两个人的计算机上都有副