緩存+寫緩沖區+無效化隊列 == 緩存一致性協議+內存屏障
參考
Java多線程編程實戰指南-核心篇 第11章前4節
計算機科學基礎知識(一):The Memory Hierarchy
硬件
緩存+寫緩沖區+無效化隊列
指令
內存屏障指令
階段
緩存 == 緩存一致性協議
緩存+寫緩沖區+無效化隊列 == 緩存一致性協議+內存屏障
MESI將緩存條目的狀態划分為Modified,Exclusive,Shared,Invalid4種。並在此基礎上定義了一組消息,用於協調各個處理器的讀寫內存操作。
無效態(Invalid) 此緩存行內容無效(空行)
共享態(Shared)此緩存行內容同於主存,並且其他處理器上的緩存也可能包含內存地址對應的副本數據。
獨占態(Exclusive)此緩存行內容同於主存,並且這個內存地址的數據不存在與其他處理器緩存中。
修改態(Modified)此緩存行內容已被修改,不同於主存。
-
處理器在讀寫操作時向總線發送特定的消息
-
處理器嗅探總線中其他處理器發送的消息並回復。
緩存條目結構
緩存條目組成:tag+flag(緩存行狀態標志)+data block(緩存行)
緩存條目地址:如0x00-0xFF,同內存地址一樣連續的。
緩存條目地址對應存儲單元位數:tag的位數+flag的位數+緩存行的位數
內存地址位數:32位。
內存地址對應存儲單元位數:8位(4GB內存)
緩存行是緩存與cpu交換數據的單位。因為tag和flag的存在,緩存行的位數小於緩存條目的位數。