目錄
Block Placement(塊放置)
?Block Identification(塊識別)
Block Replacement(塊替換)
Write Strategy(寫策略)
總結:
高速緩存設計包括四個基礎核心概念,它們分別是:Block Placement(塊放置)、Block Identification(塊識別)、Block Replacement(塊替換)以及Write Strategy(寫策略)。這四者共同構成了高速緩存的基本工作機制,理解它們是深入學習緩存設計 的前提。
Block Placement(塊放置)
這是指主存中的數據塊應該被放置到 Cache 的哪個位置。
核心問題:
一個主存塊可以放在 Cache 的哪些位置??
📚 三種主要的映射方式:
直接映射(Direct-Mapped)
-
每個主存塊只能映射到 Cache 中的一個特定位置。
-
優點:實現簡單,訪問速度快
-
缺點:沖突率高,多個主存塊可能爭用同一個位置
全相聯映射(Fully Associative)
-
主存中的任意數據塊都可以放入 Cache 的任意位置。
-
優點:沖突最小化
-
缺點:硬件復雜,查找開銷大
組相聯映射(Set-Associative)
-
Cache 分成多個集合(Set),每個集合中有多個行(Way)。
-
每個主存塊映射到一個集合,再在集合中任意位置放置。
-
常見形式如:2-way, 4-way 等
-
折中方案:在沖突率和復雜度之間取得平衡
?Block Identification(塊識別)
當我們訪問某個內存地址時,Cache 必須判斷這個地址是否在 Cache 中。
核心問題:
如何在 Cache 中識別這個塊是否存在?如果存在,是哪一塊?
🧱 Cache 的地址劃分:
-
Tag(標記位):用于識別主存塊是否和 Cache 中的塊匹配
-
Index(索引位):用于定位塊應該在哪個集合或位置
-
Block Offset:用于在塊內部定位具體的字節
?匹配流程:
對于一個內存訪問,系統會從地址中提取出:
-
Index:找到對應的 Set(或直接映射的位置)
-
Tag:與 Set 中每個塊的 Tag 比較(比較命中即是命中)
-
若命中,使用 Offset 訪問數據;否則觸發缺失(Miss)
直接映射?
組相聯映射
全相聯映射
Block Replacement(塊替換)
當 Cache 中的目標位置已經被占用,而新的主存塊又必須裝入 Cache 時,我們需要替換掉某個已經存在的塊。
核心問題:
如果緩存滿了,哪一個塊應該被替換掉?
?? 替換動作的標準流程:
-
判斷是否命中(如果命中則直接訪問);
-
如果不命中,判斷 Cache 是否有空位(組或全相聯中);
-
若無空位 → 觸發 Block Replacement 策略:
-
找到最“合適”被淘汰的塊;
-
若該塊為“臟塊” → 寫回到主存;
-
裝載新的主存塊進入該位置。
-
🤖 替換策略:
-
LRU(Least Recently Used):替換最近最少使用的數據塊(常用)
-
FIFO(First-In First-Out):替換最早進入緩存的塊(簡單但可能非最優)
-
Random Replacement:隨機選擇一個塊替換(實現簡單)
-
Pseudo-LRU:近似 LRU,用于減少硬件實現的復雜性
?策略選擇的影響:
-
替換策略直接影響 命中率(Hit Rate) 和 系統性能
-
LRU 在局部性較強的訪問模式中表現良好,但實現開銷高
Write Strategy(寫策略)
在計算機系統中,CPU 與 Cache 通信非常快,而與主存通信相對較慢。Cache 作為主存的“高速中介”,用于加速數據訪問。但當 CPU 向內存寫數據時,如果寫入 cache 后主存中數據不更新,就可能出現 一致性問題。
為了保證數據的一致性和性能,寫策略定義了“數據何時從 cache 寫入主存”的規則。
兩大類策略:
? 寫命中策略(Write Hit Policy):
Write Through(直寫)
-
定義:數據在寫入 cache 的同時,也立即寫入主存。
-
優點:主存與 cache 保持一致,簡單可靠。
-
缺點:寫操作較慢(因為每次都涉及主存寫入);可能帶來寫放大。
-
適合場景:對數據一致性要求高的系統。
CPU -> Cache(寫入) -> Memory(立即也寫入)
Write Back(回寫)
-
定義:數據只寫入 cache,不立即寫入主存,直到該 cache 塊被替換(evict)時,才寫回主存。
-
優點:寫操作延遲小、性能好,減少對主存訪問。
-
缺點:主存與 cache 不總是一致;系統復雜度更高,需要“臟位”(Dirty Bit)追蹤是否修改過。
-
適合場景:高性能計算,對延遲敏感但一致性可以稍后維護的系統。
CPU -> Cache(寫入)
↓
稍后被替換時 -> Memory(回寫)
?
? 寫缺失策略(Write Miss Policy):
發生未命中時(cache 中沒有對應數據)該怎么處理,有兩個選項:?
-
Write Allocate(寫分配)
-
缺失時先將塊讀入 Cache,然后寫入 Cache(常用于 Write-Back)
-
-
No Write Allocate(非寫分配)
-
缺失時直接寫主存,不將數據加載到 Cache(常用于 Write-Through)
-
總結:
這四部分實際上是一個閉環的機制:
-
塊放置決定了一個主存塊被映射到 Cache 的哪個位置;
-
塊識別決定我們如何判斷一個內存訪問是否命中 Cache;
-
塊替換決定當位置沖突時該替換誰;
-
寫策略決定了寫入數據時 Cache 和主存的一致性如何維護。
它們密切關聯,共同定義了 Cache 的工作行為和性能表現。
?有了以上四個基礎組成部分的理解,我們就可以正式邁入 Cache Design 的大門了。Cache
Design 是對這些策略的組合與優化,使得 Cache 在訪問速度、能效、硬件成本和命中率之間達成
平衡。一個好的設計往往結合特定應用場景,對上述四大機制做出權衡和創新。