因为每个cpu都有自己的高速缓存,而现在的计算机一般都有好几个cpu,当几个cpu都读取了主存中的同一个数据a,当cpu A修改了a数据,并写到自己的高速缓存中,而b cpu并不知道,这时候可能就会出现问题。于是有了缓存一致性协议,MESI.
MESI是指高速缓存中数据a的四种状态:
E(exlusive, 独占):当cpu A从主存中读取了数据x=0,而其他cpu没有读取这个数据,这时候这个cpu A中的数据x状态为E.注意这里的exlusive并不是锁中的独占的意思,而是表示只有一个cpu读取了这个数据,表 示 一种状态而已,并不具有排他性。
S(shared, 共享):这时候cpu B也读取了数据x=0, 那这时候cpu A中的x数据和cpuB中的x数据改为共享状态。
M(modified,修改):cpuA把x=0修改为x=1,这时候cpuA中x变成M状态。
I(invalid,无效):cpuA通过总线通知cpuB,我已经修改了数据x,于是cpuB把高速缓存中的x设置为无效I.