转自:http://www.wretch.cc/blog/hyper0672/9867141
CPU 為了加速 CODE 和 DATA 的存取,會將存取過的資料放在 Cache 中,以加速讀寫的動作。Cache
是一個比系統記憶體小,讀寫速度更快的記憶體。
Intel 的設計中,Cache 還有分層 (L1, L2, L3 Cache), CPU 會先到 L1
Cache 中尋找所需資料,如果沒有就找 L2 Cache,再沒有就找 L3
Cache,真的找不到資料才會到系統記憶體中去尋找。
專有名詞
Cache line:
Cache 存取資料時的最小單位 (通常為 8
- 512 bytes)。以 Pentium III 為例,其 Cache line 的長度為 32 bytes
Cache line
fill:
將系統記憶體的內容搬移到 Cache 的動作
Cache hit & Cache miss:
Processor
欲讀取一段記憶體時,如果此記憶體已經在 Cache 中存在,稱為 Cache Hit。反之則為 Cache miss。
Write
hit:
Processor 欲寫入一段記憶體時,如果此記憶體已經在 Cache 中存在,稱為 Cache Hit。當 Write hit
發生時,根據不同的 Policy 會執行不同的動作。
Snoop:
在 Multi-Processor 的環境下,CPU 必須監控其它 CPU
對系統記憶體以及 Cache 的動作,以確保所有的 CPU 狀態能夠同步。
Memory Type
根據不同的需要,CPU
可以對系統記憶體執行不同的 Cache 動作。
String Uncacheable (UC)
不能被
Cache
Uncacheable(UC-)
不能被 Cache,但是可以借由 MTRR 的設定,修改為 WC (Write
Combining)
Write Combining(WC)
不能被
Cache,但寫入的動作可以允許延遲,並且和其它的寫入動作合併,以減少記憶體的存取。這樣的特性適用於寫入次序無關緊要的記憶體 (如 Video
Memory)
Write Through(WT)
讀寫的動作都可以被 Cache。寫入的動作必須同時寫入到 Cache
以及系統記憶體中
Write Back(WB)
讀寫的動作都可以被 Cache。寫入的動作只寫入到 Cache,只有當 Cache line
要移除時,才執行寫回到系統記憶體的動作。此種方式可以達到最高的執行效率。
Write Protected(WP)
只有讀的動作可以被 Cache,當
CPU 執行寫入的動作時,被寫入的記憶體,其 Cache 會失效。