MESI 缓存一致性协议
MESI: 为了保证多个CPU核之间的缓存行中对应主存的数据的一致性。
缓存行的4个状态
M: Modified
代表该缓存行中的内容被修改了,并且该缓存行只被缓存在该CPU中。
并且 这个状态的缓存行中的数据和内存中的不一样,在未来的某个时刻它会被写入到内存中
E: Exclusive
E代表该缓存行对应内存中的内容只被该CPU缓存,其他CPU没有缓存该缓存对应内存行中的内容。这个状态的缓存行中的内容和内存中的内容一致。
该缓存可以在任何其他CPU读取该缓存对应内存中的内容时变成S状态。或者本地处理器写该缓存就会变成M状态。
S: Shared
该状态意味着数据不止存在本地CPU缓存中,还存在别的CPU的缓存中。这个状态的数据和内存中的数据是一致的。
当有一个CPU修改该缓存行对应的内存的内容时会使该缓存行变成 I 状态。
I: Invaild
代表该缓存行中的内容时无效的。
MESI 状态转移图
对于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