緩存一致性協議

緩存一致性協議

CPU緩存的意義

CPU緩存的存在是爲了解決CPU和主內存之間的速度差問題,現在的一般多核CPU存在多級緩存。CPU緩存的基本單位是Cache 行,是與主內存交換的基本單位,一個Cache 行的單位是2的次冪比特,所以CPU緩存一個變量的時候會緩存這個變量周圍的區域。MySQL也有這樣的特性。CPU緩存示意圖如下圖所示:
在這裏插入圖片描述

CPU緩存帶來的問題

設想一個場景,當2個CPU的一級緩存緩存了同一個變量,然後2個CPU分別用一個線程去更新這個變量的值,會導致什麼問題?
顯而易見,可能會出現緩存到不同CPU的變量值是不一致的。由此,引發了另外一個問題,緩存一致性問題,爲了避免這種情況的發生,我們規定了一個緩存一致性協議MESI

緩存一致性協議MESI的具體解釋

MESI是Cache 行4個狀態的首字母,如下:

狀態 描述 監聽任務
M 修改 (Modified) 該Cache line有效,數據被修改了,和內存中的數據不一致,數據只存在於本Cache中。 緩存行必須時刻監聽所有試圖讀該緩存行相對就主存的操作,這種操作必須在緩存將該緩存行寫回主存並將狀態變成S(共享)狀態之前被延遲執行。
E 獨享、互斥 (Exclusive) 該Cache line有效,數據和內存中的數據一致,數據只存在於本Cache中。 緩存行也必須監聽其它緩存讀主存中該緩存行的操作,一旦有這種操作,該緩存行需要變成S(共享)狀態。
S 共享 (Shared) 該Cache line有效,數據和內存中的數據一致,數據存在於很多Cache中。 緩存行也必須監聽其它緩存使該緩存行無效或者獨享該緩存行的請求,並將該緩存行變成無效(Invalid)。
I 無效 (Invalid) 該Cache line無效。

如上所示,Cache 行監聽不同的讀寫狀態,來進行Cache 狀態的轉換,來保證緩存數據與主內存數據的一致性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章