基本的mesi協(xié)議中,cache存在四種狀態(tài)e,s,m,i
i invalid, 表示該數(shù)據(jù)沒有對應(yīng)cache line
e excluisve,表示該數(shù)據(jù)有效,并且只存在本cpu的cache line中。其他cpu沒有cache該數(shù)據(jù)。
m modify, 表示該數(shù)據(jù)有效,但是與存儲器中的不一致,并且只存在本cpu的cache line中。其他cpu沒有cache該數(shù)據(jù)。
s share, 表示該數(shù)據(jù)有效,并且多個cpu都有該數(shù)據(jù)的cache line并且他們的狀態(tài)都是share。
cpu亂序,cache一致性,和內(nèi)存屏障。
內(nèi)存屏障mb() 是和cpu亂序,chache一致性相關(guān)的。下面的老例子:
cpu0
a = 1;
wmb();
b = 2;
cpu1
讀 b;
rmb();
讀 a;
cpu亂序模型會讓a=1,a=2執(zhí)行順序顛倒。 讀b,讀a順序顛倒。
wmb() 會使 a=1先執(zhí)行,然后再執(zhí)行 b=1, 說的再細一點同cache一致性就有關(guān)系了,因為a=1,之前說了是一個很多小步驟組成的過程,獲取cache使用權(quán),寫cache,發(fā)送inval a ,修改m狀態(tài)。wmb實際上就是保證,在wmb之前所有的inval request已經(jīng)發(fā)了出去。就是說保證先發(fā)inval a, 然后再發(fā)inval b.