在一致性專題之cpu緩存一致性(一)中主要描述了緩存與內存的映射方式,該篇主要描述cache line的狀態:緩存
一、狀態M表示該緩存行中數據有修改,而且與內存中的數據不一致;併發
二、狀態E表示該緩存行中數據有修改,而且與內存中的數據一致;.net
三、狀態S表示該緩存行中數據與內存中的數據一致,而且與其它內核中的cache line一致;blog
四、狀態I表示該緩存行無效;內存
每一個cache控制器除了監聽本身cache的讀寫操做還監聽其它cache的讀寫操做與狀態,所以每一個緩存行根據當前所處的狀態與監聽的動做進行狀態轉換,簡稱MESI一致性協議。讀寫操做具體可分紅4種類型(LR-本內核讀取本cache,LW-本內核寫本cache,RR-其它內核讀其對應的cache,RW-其它內核寫其對應的cache)狀態轉換過程以下:get
一、當數據所在cache line處於I狀態併發生LR時,若是其它內核cache line中沒有該數據則從內存加載,而後該cache line狀態變成E;若是其它內核cache line中有該數據並處於狀態M時,令其寫入到內存後而後本內核從內存中加載,兩個cache line都處於S狀態;若是其它內核cache line中有該數據且已處於狀態S或者E時,本cache line從內存中加載而後都變成S狀態。cpu
當數據所在cache line處於I狀態併發生LW時,先從內存加載數據而後在cache line中修改,狀態變成M;若是其它內核cache line中有該數據,且狀態爲M時先令其更新到內存而後狀態置爲I;若是其它內核cache line中有該數據,且狀態爲E時將狀態置爲無效I。而本內核的cache line狀態一直是M。數據
當數據所在cache line處於I狀態並監聽到RR和RW時不會做任何反應。協議
二、當數據所在cache line處於M狀態併發生LR時,直接讀取,狀態不變。內核
發生LW時,直接寫入,狀態不變。
監聽到RR時,數據會寫入內存而後狀態變成S。
監聽到RW時,將數據寫入內存便於其它內存讀取最新數據,而後狀態置無效I。
三、當數據所在cache line處於E狀態併發生LR時,直接讀取,狀態不變。
發生LW時,直接寫入,狀態變成M。
監聽到RR時,狀態變成S。
監聽到RW時,狀態置無效I。
四、當數據所在cache line處於S狀態併發生LR時,直接讀取,狀態不變。
發生LW時,修改cache line中的內容並將狀態變成M,其他內核的cache line置無效狀態I。
監聽到RR時,狀態不變。
監聽到RW時,cache line置無效狀態I。