概觀
TLB 用於快取一部分標籤頁表條目 。TLB可介於 CPU 和CPU快取之間,或在 CPU 快取和主存之間,這取決於快取使用的是物理定址或是虛擬定址。如果快取是虛擬定址,定址請求將會直接從 CPU 傳送給快取,然後從快取訪問所需的 TLB 條目。如果快取使用物理定址,CPU 會先對每一個存儲器操作進行 TLB 查尋,並且將獲取的物理地址傳送給快取。兩種方法各有優缺點。
採用物理定址的快取的一種常見最佳化,是並行的進行 TLB 查尋和快取的訪問。所有虛擬地址的較低比特(例如,在虛擬記憶體系統中具有 4KB 標籤頁時,虛擬地址中較低的那 12 比特)代表的是所請求的地址在分頁內部的地址偏移量(頁內地址),且這些比特不會在虛擬地址轉換到物理地址的過程中發生改變。訪問CPU快取的過程包含兩步:使用一條索引去尋找CPU快取的數據存儲區中的相應條目,然後比較找到的CPU快取條目的相應標記。如果快取是用虛實地址轉譯過程中不變的頁內地址來索引組織起來的,則可並行地執行TLB上虛實地址的較高比特(即分頁的頁間地址/頁號)的轉換與CPU快取的“索引”操作。然後,從 TLB 獲得的的物理地址的頁號會傳送給CPU快取。CPU快取會對頁號標記進行比較,以決定此次訪問是尋中或是缺失。它也有可能並行的進行 TLB 查尋和CPU快取訪問,即使CPU快取必須使用某些可能會在地址轉譯後發生改變的比特;參閱快取條目的地址轉譯一節,以獲取關於虛擬定址下快取和 TLB 的進一步細節。
TLB 不命中
兩種在現代體系結構中常用的解決 TLB 不命中的方案:
1)硬體式 TLB 管理,CPU 自行遍歷標籤頁表,查看是否存在包含指定的虛擬地址的有效標籤頁表條目。如果存在這樣的分頁表條目,就把此分頁表條目存入 TLB ,並重新執行 TLB 訪問,而此次訪問肯定會尋中,程式可正常運行。如果 CPU 在標籤頁表中不能找到包含指定的虛擬地址有效條目,就會發生標籤頁錯誤異常,作業系統必須處理這個異常。處理標籤頁錯誤通常是把被請求的數據載入物理存儲器中,並在標籤頁表中創建將出錯的虛擬地址映射到正確的物理地址的相應條目,並重新啟動程式(詳見標籤頁錯誤)。
2)軟體管理式 TLB,TLB 不命中時會產生“TLB 失誤”異常,且作業系統遍歷標籤頁表,以軟體方式進行虛實地址轉譯。然後作業系統將分頁表中回響的條目載入 TLB 中,然後從引起 TLB 失誤的指令處重新啟動程式。如同硬體式 TLB 管理,如果 作業系統 在標籤頁表中不能找到有效的虛實地址轉譯條目,就會發生標籤頁錯誤, 作業系統 必須進行相應的處理。
典型的 TLB
•容量:8 - 4,096 分頁表條目
•尋中時間:0.5 - 1 時鐘頻率周期
•不命中代價:10 - 30 時鐘頻率周期
•不命中率: 0.01% - 3%
假如 TLB 尋中需要 1 個時鐘頻率周期,一次不命中訪問需要 30 個時鐘頻率周期,而且不命中率是 1%,有效的存儲器訪問周期的平均值是
個時鐘頻率周期/每一存儲器訪問。
指令與數據可以分別使用不同的TLB ,即Instruction TLB (ITLB)與 Data TLB (DTLB),或者指令與數據使用統一的TLB,即Unified TLB (UTLB),再或者使用分塊的TLB (BTLB)。
任務切換
在任務(task)切換時,部分 TLB 條目可能會失效,例如先前運行的進程已訪問過一個頁面,但是將要執行的進程尚未訪問此頁面。最簡單的策略是清出整個 TLB。較新的 CPU 已有更多有效的策略;例如在Alpha EV6中,每一個 TLB 條目會有一個“地址空間號碼”(address space number,ASN)的標記,而且只有匹配目前工作的 ASN 的 TLB 條目才會被視為有效。