From Wikipedia, the free encyclopedia.
MESI 协议是一种被广泛使用的cache一致性和内存一致性协议。它是最常见的支持写回cache的协议。它被广泛应用于PC由于Intel的Pentium处理器采用了该协议,来支持更加高效的写回cache,除了先前在Intel486处理器中使用的写直达cache。
状态:
------------------------------------------------*********-------------------------------------------------
每一个cache 行都被标记为以下四种状态之一:
修改(Modified):
该cache行只存在于当前的cache中,并且是dirty的,和内存中的值相比它是已经被修改过的。在允许任何其他读操作之前,cache需要将数据写回到主存。写回将该行的状态变为独占(Exclusive)。
独占(Exclusive):
cache行只存在于当前的cache中,但却是clean的;它和主存中的数据是一致的。在任何时刻,回应一个读请求,它可能被改变为共享状态;同样的,当对它进行写操作时,可以被变成修改状态。
共享(Shared):
该状态说明这个cache行可能被存储在系统中其他的cache中,并且是clean的,和主存中的内容是一致的。这个cache行可以在任何时候被丢弃。
无效(Invalid):
该状态说明这个cache行是无效的。
--------------------------------------------*********-------------------------------------------------
操作:
一个典型的系统中,多个caches共享一个主存公共总线。cache的总体目标就是最小化对共享主存的使用。
除了Invalid状态,cache可以满足任何一个读请求;一个无效行必须被内存中取出(变成共享或者独占状态)来实现读请求。
当cache行是修改或者独占状态时,写操作才可以被执行。如果该行是共享状态,所有其他的cache拷贝必须首先被置为无效。这可以通过一个广播操作来完成(Request For Ownership RFO)。
cache可以丢弃非修改状态的行,并且变为无效状态。一个修改行必须首先被写回。
拥有修改状态行的cache必须监听所有对相关内存地址的读请求(来自系统中所有其他的cache),并且插入它所包含的数据。这通常通过强制读请求后退,然后将数据写到内存,将cache行的状态变为共享状态。
拥有共享状态行的cache必须监听所有的来自其他cache无效广播,并且丢弃该行,置为无效状态。
拥有独占状态cache行的cache必须窥探所有来自其他cache的读交易,并且将该行的状态置为共享状态。