日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

缓存一致性(MESI)

發(fā)布時(shí)間:2025/4/16 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 缓存一致性(MESI) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

所以就出現(xiàn)了緩存一致性協(xié)議。最出名的就是Intel 的MESI協(xié)議,MESI協(xié)議保證了每個(gè)緩存中使用的共享變量的副本是一致的。它核心的思想是:當(dāng)CPU寫數(shù)據(jù)時(shí),如果發(fā)現(xiàn)操作的變量是共享變量,即在其他CPU中也存在該變量的副本,會(huì)發(fā)出信號(hào)通知其他CPU將該變量的緩存行置為無(wú)效狀態(tài),因此當(dāng)其他CPU需要讀取這個(gè)變量時(shí),發(fā)現(xiàn)自己緩存中緩存該變量的緩存行是無(wú)效的,那么它就會(huì)從內(nèi)存重新讀取。

Cache一致性協(xié)議之MESI
處理器上有一套完整的協(xié)議,來(lái)保證Cache一致性。比較經(jīng)典的Cache一致性協(xié)議當(dāng)屬M(fèi)ESI協(xié)議,奔騰處理器有使用它,很多其他的處理器都是使用它的變種。

單核Cache中每個(gè)Cache line有2個(gè)標(biāo)志:dirty和valid標(biāo)志,它們很好的描述了Cache和Memory(內(nèi)存)之間的數(shù)據(jù)關(guān)系(數(shù)據(jù)是否有效,數(shù)據(jù)是否被修改),而在多核處理器中,多個(gè)核會(huì)共享一些數(shù)據(jù),MESI協(xié)議就包含了描述共享的狀態(tài)。

在MESI協(xié)議中,每個(gè)Cache line有4個(gè)狀態(tài),可用2個(gè)bit表示,它們分別是:

MESI狀態(tài)

M(Modified)和E(Exclusive)狀態(tài)的Cache line,數(shù)據(jù)是獨(dú)有的,不同點(diǎn)在于M狀態(tài)的數(shù)據(jù)是dirty的(和內(nèi)存的不一致),E狀態(tài)的數(shù)據(jù)是clean的(和內(nèi)存的一致)。

S(Shared)狀態(tài)的Cache line,數(shù)據(jù)和其他Core的Cache共享。只有clean的數(shù)據(jù)才能被多個(gè)Cache共享。

I(Invalid)表示這個(gè)Cache line無(wú)效。

E狀態(tài)示例如下:

只有Core 0訪問(wèn)變量x,它的Cache line狀態(tài)為E(Exclusive)。
S狀態(tài)示例如下:

3個(gè)Core都訪問(wèn)變量x,它們對(duì)應(yīng)的Cache line為S(Shared)狀態(tài)。

M狀態(tài)和I狀態(tài)示例如下:

Core 0修改了x的值之后,這個(gè)Cache line變成了M(Modified)狀態(tài),其他Core對(duì)應(yīng)的Cache line變成了I(Invalid)狀態(tài)。

在MESI協(xié)議中,每個(gè)Cache的Cache控制器不僅知道自己的讀寫操作,而且也監(jiān)聽(snoop)其它Cache的讀寫操作。每個(gè)Cache line所處的狀態(tài)根據(jù)本核和其它核的讀寫操作在4個(gè)狀態(tài)間進(jìn)行遷移。

MESI協(xié)議狀態(tài)遷移圖如下:

在上圖中,Local Read表示本內(nèi)核讀本Cache中的值,Local Write表示本內(nèi)核寫本Cache中的值,Remote Read表示其它內(nèi)核讀其它Cache中的值,Remote Write表示其它內(nèi)核寫其它Cache中的值,箭頭表示本Cache line狀態(tài)的遷移,環(huán)形箭頭表示狀態(tài)不變。

當(dāng)內(nèi)核需要訪問(wèn)的數(shù)據(jù)不在本Cache中,而其它Cache有這份數(shù)據(jù)的備份時(shí),本Cache既可以從內(nèi)存中導(dǎo)入數(shù)據(jù),也可以從其它Cache中導(dǎo)入數(shù)據(jù),不同的處理器會(huì)有不同的選擇。MESI協(xié)議為了使自己更加通用,沒(méi)有定義這些細(xì)節(jié),只定義了狀態(tài)之間的遷移,下面的描述假設(shè)本Cache從內(nèi)存中導(dǎo)入數(shù)據(jù)。

MESI狀態(tài)之間的遷移過(guò)程如下:

AMD的Opteron處理器使用從MESI中演化出的MOESI協(xié)議,O(Owned)是MESI中S和M的一個(gè)合體,表示本Cache line被修改,和內(nèi)存中的數(shù)據(jù)不一致,不過(guò)其它的核可以有這份數(shù)據(jù)的拷貝,狀態(tài)為S。

Intel的core i7處理器使用從MESI中演化出的MESIF協(xié)議,F(Forward)從Share中演化而來(lái),一個(gè)Cache line如果是Forward狀態(tài),它可以把數(shù)據(jù)直接傳給其它內(nèi)核的Cache,而Share則不能。

總結(jié)

以上是生活随笔為你收集整理的缓存一致性(MESI)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。