計算機體系結構中快取一致性的方法有哪些?
快取一致性主要有兩種方法,如下所示:
- 快取-記憶體一致性
在單一快取系統中,記憶體和快取之間的一致性透過兩種策略之一來維護:(1) 直寫,(2) 回寫。例如,當在處理器 P 上執行的任務請求記憶體位置 X 中的資料時,X 的內容將被複制到快取中,然後傳遞給 P。
當 P 更新快取中 X 的值時,也需要更新記憶體中的另一個副本以保持一致性。在直寫策略中,每次更新快取時都會更新記憶體,而在回寫策略中,只有當快取中的塊被替換時才會更新記憶體。表格顯示了直寫與回寫策略的比較。
直寫 vs. 回寫
直寫 | 回寫 | ||||
---|---|---|---|---|---|
序列 | 事件 | 記憶體 | 快取 | 記憶體 | 快取 |
1 | X | X | |||
2 | P 讀取 X | X | X | X | X |
3 | P 更新 X | X | X | X | X |
- 快取-快取一致性
在多處理系統中,例如,當在處理器 P 上執行的任務請求全域性記憶體位置 X 中的資料時,X 的內容將被複制到處理器 P 的本地快取中,然後傳遞給 P。
有兩種基本的快取一致性策略:(1) 寫無效,(2) 寫更新。寫無效透過讀取本地快取直到發生寫入操作來維護一致性。
當任何處理器透過寫入操作更新 X 的值時,為 X 釋出髒位將使所有其他副本無效。例如,當處理器 Q 將新值寫入其快取時,它會使 X 的所有其他副本無效。這將為 X 設定髒位。Q 可以繼續更改 X,而無需進一步通知其他快取,因為 Q 擁有 X 的唯一有效副本。
但是,當處理器 P 想要讀取 X 時,它必須等待直到 X 被更新並且髒位被清除。寫更新透過立即更新所有快取中的所有副本來維護一致性。在每次寫入操作期間都會設定所有髒位。畢竟,所有副本都已更新,所有髒位都已清除。表格顯示了寫更新與寫無效策略的比較。
寫更新 vs. 寫無效
寫更新 | 寫無效 | ||||
---|---|---|---|---|---|
序列 | 事件 | P 的快取 | Q 的快取 | P 的快取 | Q 的快取 |
1 | P 讀取 X | X | X | ||
2 | Q 讀取 X | X | X | X | X |
3 | Q 更新 X | X’ | X’ | INV | X’ |
4 | Q 更新 X’ | X’’ | X’’ | INV | X’’ |
廣告