概念
MESI
(Modified Exclusive Shared Or Invalid
)(也稱為伊利諾斯協(xié)議,是因為該協(xié)議由伊利諾斯州立大學(xué)提出)是一種廣泛使用的支持寫回策略的緩存一致性協(xié)議神凑。
MESI協(xié)議中的狀態(tài)
CPU
中每個緩存行(caceh line
)使用4種狀態(tài)進行標(biāo)記(使用額外的兩位(bit
)表示):
M: 被修改(Modified)
該緩存行只被緩存在該CPU
的緩存中贿讹,并且是被修改過的(dirty
),即與主存中的數(shù)據(jù)不一致蛹含,該緩存行中的內(nèi)存需要在未來的某個時間點(允許其它CPU
讀取請主存中相應(yīng)內(nèi)存之前)寫回(write back
)主存旱捧。
當(dāng)被寫回主存之后耘子,該緩存行的狀態(tài)會變成獨享(exclusive
)狀態(tài)脏里。
E: 獨享的(Exclusive)
該緩存行只被緩存在該CPU
的緩存中她我,它是未被修改過的(clean
),與主存中數(shù)據(jù)一致。該狀態(tài)可以在任何時刻當(dāng)有其它CPU讀取該內(nèi)存時變成共享狀態(tài)(shared
)番舆。
同樣地酝碳,當(dāng)CPU
修改該緩存行中內(nèi)容時,該狀態(tài)可以變成Modified
狀態(tài)恨狈。
S: 共享的(Shared)
該狀態(tài)意味著該緩存行可能被多個CPU
緩存疏哗,并且各個緩存中的數(shù)據(jù)與主存數(shù)據(jù)一致(clean
),當(dāng)有一個CPU
修改該緩存行中禾怠,其它CPU
中該緩存行可以被作廢(變成無效狀態(tài)(Invalid
))返奉。
I: 無效的(Invalid)
該緩存是無效的(可能有其它CPU
修改了該緩存行)。
MESI狀態(tài)轉(zhuǎn)換圖
狀態(tài)之間的相互轉(zhuǎn)換關(guān)系也可以使用下表進行表示吗氏。
操作
在一個典型系統(tǒng)中芽偏,可能會有幾個緩存(在多核系統(tǒng)中,每個核心都會有自己的緩存)共享主存總線牲证,每個相應(yīng)的CPU
會發(fā)出讀寫請求哮针,而緩存的目的是為了減少CPU
讀寫共享主存的次數(shù)。
一個緩存除在Invalid
狀態(tài)外都可以滿足cpu
的讀請求坦袍,一個Invalid
的緩存行必須從主存中讀仁帷(變成S
或者 E
狀態(tài))來滿足該CPU
的讀請求。
一個寫請求只有在該緩存行是M
或者E
狀態(tài)時才能被執(zhí)行捂齐,如果緩存行處于S
狀態(tài)蛮放,必須先將其它緩存中該緩存行變成Invalid
狀態(tài)(也既是不允許不同CPU
同時修改同一緩存行,即使修改該緩存行中不同位置的數(shù)據(jù)也不允許)奠宜。該操作經(jīng)常作用廣播的方式來完成包颁,例如:RequestFor Ownership (RFO)
。
緩存可以隨時將一個非M
狀態(tài)的緩存行作廢压真,或者變成Invalid
狀態(tài)娩嚼,而一個M
狀態(tài)的緩存行必須先被寫回主存。
一個處于M
狀態(tài)的緩存行必須時刻監(jiān)聽所有試圖讀該緩存行相對就主存的操作滴肿,這種操作必須在緩存將該緩存行寫回主存并將狀態(tài)變成S
狀態(tài)之前被延遲執(zhí)行岳悟。
一個處于S
狀態(tài)的緩存行也必須監(jiān)聽其它緩存使該緩存行無效或者獨享該緩存行的請求,并將該緩存行變成無效(Invalid
)泼差。
一個處于E
狀態(tài)的緩存行也必須監(jiān)聽其它緩存讀主存中該緩存行的操作贵少,一旦有這種操作,該緩存行需要變成S
狀態(tài)堆缘。
對于M
和E
狀態(tài)而言總是精確的滔灶,他們在和該緩存行的真正狀態(tài)是一致的。而S
狀態(tài)可能是非一致的吼肥,如果一個緩存將處于S
狀態(tài)的緩存行作廢了录平,而另一個緩存實際上可能已經(jīng)
獨享了該緩存行麻车,但是該緩存卻不會將該緩存行升遷為E狀態(tài),這是因為其它緩存不會廣播他們作廢掉該緩存行的通知萄涯,同樣由于緩存并沒有保存該緩存行的copy
的數(shù)量绪氛,因此(即使有這種通知)也沒有辦法確定自己是否已經(jīng)獨享了該緩存行。
從上面的意義看來E狀態(tài)是一種投機性的優(yōu)化:如果一個CPU
想修改一個處于S
狀態(tài)的緩存行涝影,總線事務(wù)需要將所有該緩存行的copy
變成Invalid
狀態(tài),而修改E
狀態(tài)的緩存不需要使用總線事務(wù)争占。