在多核cpu情況下,每個cpu都有自己的
一、二級快取,在多核處理的情況下,如果一方修改了cpu中已經快取的東西,而又沒有通知已經讀取到該cache line的另一方,就會導致兩邊資訊不一致。
mesi(modified exclusive shared or invalid)(也成為伊利諾斯協議,是因為該協議由伊利諾斯州立大學提出)是一種廣泛使用的支援寫回策略的快取一致性協議。
cpu中每個快取行(cache line)使用4種狀態進行標記(cache line中使用額外的兩位(bit)標識)
m:被修改(modified)
該快取行被快取在該cpu中,並且是被修改過的(dirty)(此時其他cpu中該快取行和主存中該快取行的狀態都是無效的(invalid)),與主存中的資料不一致,該快取行中的資料需要在未來某個時間點(允許其他cpu讀取主存中相應的內容之前)寫回(write back)主存。
當被寫回主存之後,該快取行的狀態會變成獨享(exclusive)狀態。
e:獨享的(exclusive)
該快取行只被快取在該cpu中,它是未被修改過的,與主存中資料一致。該狀態可以在任何時候當有其他cpu讀取主存中該快取行時,變成共享狀態(shared)。
s:共享的(shared)
該狀態意味著該快取行可能被多個cpu快取,並且各個快取中的資料與主存資料一致,當有乙個cpu修改對應快取行後,其他cpu中對應的該快取行被作廢(變成無效狀態invalid)。
i:無效的(invalid)
該快取行是無效的(可能有其他cpu修改了該快取行),不能被其他cpu讀取,並使用,需要修改該cache line對應的cpu寫回資料後方可重新訪問。
4、mesi狀態流轉
mesi狀態之間的遷移過程如下:
說明:
local read:表示本核心讀取本cache line的值;
local write:表示本核心寫本cache line的值;
remote read:標識其他核心讀取其他cache line的值;
remote write:標識其他核心寫其他cache line的值。
下圖示意了,當乙個cache line的調整的狀態的時候,另外乙個cache line 需要調整的狀態。me
si
m×××
√e×××
√s××√
√i√√√
√舉個例子來說:
假設在主存中有cache line,有乙個變數m=1,如下圖
cpu-a 發出了一條讀取指令,從主存中讀取m,從主存中通過bus讀取到核心快取,因為當前只有cpu-a擁有該快取行,且資料狀態一致,所以在cpu-a中,該快取行狀態是e,並且主存中的快取行可以被其他核心讀取。
此時cpu-b發出了一條讀取指令,從主存中讀取m,cpu-b從主存中讀取m時,cpu-a監聽到了這個操作,此時cpu-a和cpu-b中該快取行的狀態即為s(資料與主存中的狀態一致)
假設此時cpu-a對m進行計算,此時cpu-a將快取行設定成m(修改),並通知cpu-b,cpu-b中此時該快取行的狀態是i(無效狀態),並且主存中該快取行的狀態也是無效狀態,不能被讀取和操作。
cpu-a修改完資料後,cpu-b需要使用最新的資料,cpu-b發出讀取指令後,cpu-a在某個時刻將資料寫回到主存,在cpu-a中該快取行狀態由m變為s,並且主存中該快取行資料變為有效,此時cpu-b再去讀取一遍,此時cpu-b中該快取行資料變為s。
併發程式設計 MESI CPU快取一致性協議
mesi modified exclusive shared or invalid 也稱為伊利諾斯協議,是因為該協議由伊利諾斯州立大學提出 是一種廣泛使用的支援寫回策略的快取一致性協議。cpu中每個快取行 caceh line 使用4種狀態進行標記 使用額外的兩位 bit 表示 該快取行只被快取在該...
併發程式設計 MESI CPU快取一致性協議
原文 多執行緒之 mesi cpu快取一致性協議 mesi modified exclusive shared or invalid 也稱為伊利諾斯協議,是因為該協議由伊利諾斯州立大學提出 是一種廣泛使用的支援寫回策略的快取一致性協議。cpu中每個快取行 caceh line 使用4種狀態進行標記 ...
CPU 一致性快取協議MESI
計算機在執行指令的時候都是通過cpu進行逐條執行而在執行指令的過程中勢必涉及對資料的讀寫,而資料基本從磁碟載入到記憶體中cpu直接使用記憶體中的資料 由於cpu計算速度遠大於對記憶體的讀寫速度如果任何資料的讀寫都通過記憶體cpu的效率將會大打折扣,因此在cpu中引入暫存器作為快取記憶體提高系統效率例...