MESI(快取一致性協議)

2021-10-18 16:43:20 字數 2253 閱讀 3934

現在的處理器都是多核處理器,並且每個核都帶有多個快取(指令快取和資料快取,見下圖)。為什麼需要快取呢,這是因為cpu訪問記憶體的速度比較慢,所以在cpu和記憶體之間加了個快取以提高訪問速度。既然每個核都有快取,那麼假設兩個核或者多個核同時訪問同乙個變數時這些快取是如何進行同步的呢(快取細分為乙個個快取行),這就有了mesi協議。

快取行的四個狀態:

mesi中每個快取行都有四個狀態,分別是e(exclusive)、m(modified)、s(shared)、i(invalid)。下面我們介紹一下這四個狀態分別代表什麼意思。

m:代表該快取行中的內容被修改了,並且該快取行只被快取在該cpu中。這個狀態的快取行中的資料和記憶體中的不一樣,在未來的某個時刻它會被寫入到記憶體中(當其他cpu要讀取該快取行的內容時。或者其他cpu要修改該快取對應的記憶體中的內容時(個人理解cpu要修改該記憶體時先要讀取到快取中再進行修改),這樣的話和讀取快取中的內容其實是乙個道理)。

e:e代表該快取行對應記憶體中的內容只被該cpu快取,其他cpu沒有快取該快取對應記憶體行中的內容。這個狀態的快取行中的內容和記憶體中的內容一致。該快取可以在任何其他cpu讀取該快取對應記憶體中的內容時變成s狀態。或者本地處理器寫該快取就會變成m狀態。

s:該狀態意味著資料不止存在本地cpu快取中,還存在別的cpu的快取中。這個狀態的資料和記憶體中的資料是一致的。當有乙個cpu修改該快取行對應的記憶體的內容時會使該快取行變成 i 狀態。

i:代表該快取行中的內容時無效的。

emsi狀態轉移圖:

local read和local write分別代表本地cpu讀寫。remote read和remote write分別代表其他cpu讀寫。建議首次看emsi內容的可以自己把下面這個**寫下來(我自己就是這麼做的),這樣理解會深一點。

當前狀態

事件行為

下乙個狀態

i(invalid)

local  read

1.如果其他處理器中沒有這份資料,本快取從記憶體中取該資料,狀態變為e

2.如果其他處理器中有這份資料,且快取行狀態為m,則先把快取行中的內容寫回到記憶體。本地cache再從記憶體讀取資料,這時兩個cache的狀態都變為s

3.如果其他快取行中有這份資料,並且其他快取行的狀態為s或e,則本地cache從記憶體中取資料,並且這些快取行的狀態變為s

e或slocal  write

1.先從記憶體中取資料,如果其他快取中有這份資料,且狀態為m,則先將資料更新到記憶體再讀取(個人認為順序是這樣的,其他cpu的快取內容更新到記憶體中並且被本地cache讀取時,兩個cache狀態都變為s,然後再寫時把其他cpu的狀態變為i,自己的變為m)

2.如果其他快取中有這份資料,且狀態為e或s,那麼其他快取行的狀態變為i

m remote  read

remote read不影響本地cache的狀態

iremote  write

remote read不影響本地cache的狀態

ie(exclusive)

local  read

狀態不變

elocal  write

狀態變為m

mremote  read

資料和其他核共享,狀態變為s

sremote  write

其他cpu修改了資料,狀態變為i

is(shared)

local  read

不影響狀態

slocal  write

其他cpu的cache狀態變為i,本地cache狀態變為m

mremote  read

不影響狀態

sremote  write

本地cache狀態變為i,修改內容的cpu的cache狀態變為m

im(modified)

local  read

狀態不變

mlocal  write

狀態不變

mremote  read

先把cache中的資料寫到記憶體中,其他cpu的cache再讀取,狀態都變為s

sremote  write

先把cache中的資料寫到記憶體中,其他cpu的cache再讀取並修改後,本地cache狀態變為i。修改的那個cache狀態變為m

i

快取一致性協議MESI

處理器上有一套完整的協議,來保證cache一致性。比較經典的cache一致性協議當屬mesi協議,奔騰處理器有使用它,很多其他的處理器都是使用它的變種。單核cache中每個cache line有2個標誌 dirty和valid標誌,它們很好的描述了cache和memory 記憶體 之間的資料關係 資...

快取一致性協議(MESI協議)

大家都知道,計算機在執行程式時,每條指令都是在cpu中執行的,而執行指令過程中,勢必涉及到資料的讀取和寫入。由於程式執行過程中的臨時資料是存放在主存 物理記憶體 當中的,這時就存在乙個問題,由於cpu執行速度很快,而從記憶體讀取資料和向記憶體寫入資料的過程跟cpu執行指令的速度比起來要慢的多,因此如...

CPU 一致性快取協議MESI

計算機在執行指令的時候都是通過cpu進行逐條執行而在執行指令的過程中勢必涉及對資料的讀寫,而資料基本從磁碟載入到記憶體中cpu直接使用記憶體中的資料 由於cpu計算速度遠大於對記憶體的讀寫速度如果任何資料的讀寫都通過記憶體cpu的效率將會大打折扣,因此在cpu中引入暫存器作為快取記憶體提高系統效率例...