MSI、MESI、MOESI 的差異:狀態數、Exclusive 狀態、Owned 狀態、通訊比較
MSI、MESI、MOESI 是在多核心的各快取所持有的快取列上標記狀態,使同一位址的資料不會發生不一致的協定。MSI 是只有 Modified、Shared、Invalid 3 種狀態的基本形式。MESI 加上 Exclusive(只有自己持有,且內容與記憶體相同),在寫入其他核心未持有的資料時,可省去匯流排上的通訊。MOESI 再加上 Owned 狀態,能在不將修改後的資料寫回記憶體的情況下,與其他快取共用。
| 項目 | MSI | MESI | MOESI |
|---|---|---|---|
| 狀態數 | 3 種(M、S、I) | 4 種(M、E、S、I) | 5 種(M、O、E、S、I) |
| Modified(M) | 只有自己持有,內容與記憶體不同 | 相同 | 相同 |
| Shared(S) | 其他快取也可能持有。內容與記憶體相同 | 相同 | 其他快取也可能持有。內容也可能與記憶體不同(存在 O 狀態的快取列時) |
| Exclusive(E) | 無 | 只有自己持有,內容與記憶體相同 | 有(與 MESI 相同) |
| Owned(O) | 無 | 無 | 內容與記憶體不同,但其他快取也以 S 共用。負有寫回記憶體的責任 |
| 讀取其他核心未持有的資料時 | 以 S 狀態載入 | 以 E 狀態載入 | 以 E 狀態載入 |
| 接著寫入該資料時 | 為了從 S 變為 M,要在匯流排等發出使其他副本失效的要求 | 可在無通訊的情況下從 E 變為 M | 可在無通訊的情況下從 E 變為 M |
| 其他核心讀取 M 狀態的快取列時 | 寫回記憶體,雙方都變為 S 狀態 | 寫回記憶體,雙方都變為 S 狀態(也可能由快取直接傳送資料) | 不寫回就傳送資料,自己變為 O 狀態,對方變為 S 狀態 |
| 寫回記憶體 | 每當修改過的快取列被其他核心讀取時發生 | 每當修改過的快取列被其他核心讀取時發生 | 可延後到 O 狀態的快取列被逐出時 |
| 表示狀態的位元數與複雜度 | 2 位元。最簡單 | 2 位元。中等 | 3 位元。最複雜 |
數值為具代表性的大致參考值,會因世代或產品而異。