概念
MESI
(Modified Exclusive Shared Or Invalid
)(也稱為伊利諾斯協(xié)議驾锰,是因?yàn)樵搮f(xié)議由伊利諾斯州立大學(xué)提出)是一種廣泛使用的支持寫回策略的緩存一致性協(xié)議。
MESI協(xié)議中的狀態(tài)
CPU
中每個(gè)緩存行(caceh line
)使用4種狀態(tài)進(jìn)行標(biāo)記(使用額外的兩位(bit
)表示):
M: 被修改(Modified)
該緩存行只被緩存在該CPU
的緩存中滚局,并且是被修改過的(dirty
),即與主存中的數(shù)據(jù)不一致鹤耍,該緩存行中的內(nèi)存需要在未來的某個(gè)時(shí)間點(diǎn)(允許其它CPU
讀取請(qǐng)主存中相應(yīng)內(nèi)存之前)寫回(write back
)主存。
當(dāng)被寫回主存之后,該緩存行的狀態(tài)會(huì)變成獨(dú)享(exclusive
)狀態(tài)宛乃。
E: 獨(dú)享的(Exclusive)
該緩存行只被緩存在該CPU
的緩存中,它是未被修改過的(clean
)蒸辆,與主存中數(shù)據(jù)一致烤惊。該狀態(tài)可以在任何時(shí)刻當(dāng)有其它CPU
讀取該內(nèi)存時(shí)變成共享狀態(tài)(shared
)。
同樣地吁朦,當(dāng)CPU
修改該緩存行中內(nèi)容時(shí)柒室,該狀態(tài)可以變成Modified
狀態(tài)。
S: 共享的(Shared)
該狀態(tài)意味著該緩存行可能被多個(gè)CPU
緩存逗宜,并且各個(gè)緩存中的數(shù)據(jù)與主存數(shù)據(jù)一致(clean
)雄右,當(dāng)有一個(gè)CPU
修改該緩存行中,其它CPU
中該緩存行可以被作廢(變成無效狀態(tài)(Invalid
))纺讲。
I: 無效的(Invalid)
該緩存是無效的(可能有其它CPU
修改了該緩存行)擂仍。
MESI狀態(tài)轉(zhuǎn)換圖[#]
狀態(tài)之間的相互轉(zhuǎn)換關(guān)系也可以使用下表進(jìn)行表示。
操作
在一個(gè)典型系統(tǒng)中熬甚,可能會(huì)有幾個(gè)緩存(在多核系統(tǒng)中逢渔,每個(gè)核心都會(huì)有自己的緩存)共享主存總線,每個(gè)相應(yīng)的CPU
會(huì)發(fā)出讀寫請(qǐng)求乡括,而緩存的目的是為了減少CPU
讀寫共享主存的次數(shù)肃廓。
一個(gè)緩存除在Invalid
狀態(tài)外都可以滿足cpu的讀請(qǐng)求,一個(gè)Invalid
的緩存行必須從主存中讀然迕凇(變成S
或者 E
狀態(tài))來滿足該CPU
的讀請(qǐng)求盲赊。
一個(gè)寫請(qǐng)求只有在該緩存行是M或者E狀態(tài)時(shí)才能被執(zhí)行,如果緩存行處于S
狀態(tài)敷扫,必須先將其它緩存中該緩存行變成Invalid
狀態(tài)(也既是不允許不同CPU
同時(shí)修改同一緩存行哀蘑,即使修改該緩存行中不同位置的數(shù)據(jù)也不允許)。該操作經(jīng)常作用廣播的方式來完成,例如:RequestFor Ownership
(RFO
)绘迁。
緩存可以隨時(shí)將一個(gè)非M狀態(tài)的緩存行作廢合溺,或者變成Invalid
狀態(tài),而一個(gè)M
狀態(tài)的緩存行必須先被寫回主存缀台。
一個(gè)處于M
狀態(tài)的緩存行必須時(shí)刻監(jiān)聽所有試圖讀該緩存行相對(duì)就主存的操作棠赛,這種操作必須在緩存將該緩存行寫回主存并將狀態(tài)變成S狀態(tài)之前被延遲執(zhí)行。
一個(gè)處于S狀態(tài)的緩存行也必須監(jiān)聽其它緩存使該緩存行無效或者獨(dú)享該緩存行的請(qǐng)求将硝,并將該緩存行變成無效(Invalid
)恭朗。
一個(gè)處于E狀態(tài)的緩存行也必須監(jiān)聽其它緩存讀主存中該緩存行的操作屏镊,一旦有這種操作依疼,該緩存行需要變成S
狀態(tài)。
對(duì)于M
和E
狀態(tài)而言總是精確的而芥,他們?cè)诤驮摼彺嫘械恼嬲隣顟B(tài)是一致的律罢。而S
狀態(tài)可能是非一致的,如果一個(gè)緩存將處于S
狀態(tài)的緩存行作廢了棍丐,而另一個(gè)緩存實(shí)際上可能已經(jīng)
獨(dú)享了該緩存行误辑,但是該緩存卻不會(huì)將該緩存行升遷為E
狀態(tài),這是因?yàn)槠渌彺娌粫?huì)廣播他們作廢掉該緩存行的通知歌逢,同樣由于緩存并沒有保存該緩存行的copy
的數(shù)量巾钉,因此(即使有這種通知)也沒有辦法確定自己是否已經(jīng)獨(dú)享了該緩存行。
從上面的意義看來E狀態(tài)是一種投機(jī)性的優(yōu)化:如果一個(gè)CPU
想修改一個(gè)處于S
狀態(tài)的緩存行秘案,總線事務(wù)需要將所有該緩存行的copy
變成Invalid
狀態(tài)砰苍,而修改E
狀態(tài)的緩存不需要使用總線事務(wù)。
參考資料:
計(jì)算機(jī)體系結(jié)構(gòu)(第五版)-復(fù)習(xí)-MESI&MOESI協(xié)議
https://www.cnblogs.com/z00377750/p/9180644.html