MESI protocol
MESI协议是一种基于无效的缓存一致性协议。
什么是基于无效呢?
首先讲一下CPU和缓存的关系。计算机在数据处理或信号控制的时候,常与内存进行数据访问,但是内存和CPU的速度差别很大,所以会造成CPU资源浪费问题,为了解决两者的速度不匹配,所以在两者之间加了L1、L2、L3等缓存。在多核计算机中有多个CPU,每个CPU都有自己的缓存,所以就会造成缓存的数据不一致问题。
在早期解决缓存不一致是对总线使用LOCK#锁,使得CPU访问某个变量的时候,其他CPU无法访问。但是这种效率很低。
MESI的主要思想:当CPU写数据时,如果该变量是共享数据,给其他CPU发送信号,使得其他的CPU中的该变量的缓存行无效。
执行写操作的时候有两种策略,一种是write-back caches,另一种是write-through caches。
MESI支持write-back。
Write-through: write is done synchronously both to the cache and to the backing store.
Write-back (also called write-behind): initially, writing is done only to the cache. The write to the backing store is postponed until the modified content is about to be replaced by another cache block.
Write through就是直接写回主存。
Write back就是先标记不写回,等到使用的时候再写回主存。
Write through和Write back的区别
MESI代表了四种状态:
- M(Modified):在缓存行中被标记为Modified的值,与主存中的值不同,这个值将会在它被读取之前写入内存,并且状态置为Shared。
- E(Exclusive):在缓存行中被标记为Modified的值与主存中的值一致,被读取时置为Shared状态,被写时置为Modified状态。
- S(Shared):值也可能存在于其他缓存中,但是它的值和主存中的值一致。
- I(Invalid):缓存行无效。
很清晰的一篇文章供以后自己查看。