在multi-core處理器中,一般情況下,資料可以被多core共享。如果多core通路了一個相同位址,為了保證通路資料的正确性,需要進行資料同步。
常用的最簡單的一緻性協定為MESI :
Modified: 資料隻存在此cacheline中,cache和下級存儲不一緻,dirty (注意:Instruction cache沒有M狀态)
Exclusive:資料隻存在此cacheline中,cache資料和下級存儲一緻,clean
Shared : 資料存在多個(或1個)cacheline中, cache資料和下級存儲一緻,clean
Invalid: 此cacheline資料無效
其他增強版:
Intel 采用MESIF,增加一個F狀态( Forward )
AMD采用MOESI,增加一個O狀态(Owned )
IBM 采用MERSI,增加一個R狀态 (Recent)
以一個inclusive + write back + Write allocate 的cache為例, 且隻考慮L1d cache 和L2,來看下cache的狀态遷移。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0zbHVGawJTWuB3MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLxgTM2EDNzETM4EzMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
也可參考《大話處理器》中的狀态遷移圖
參考 木兮清揚 《大話處理器》
https://blog.csdn.net/muxiqingyang/article/details/6615199
https://en.wikipedia.org/wiki/Cache_coherence