轉譯後備緩衝區

轉譯後備緩衝區（, TLB），在中国大陆被翻译为页表缓存、转址旁路缓存，為CPU的一种缓存，由-{zh-hans:内存管理单元;zh-hant:記憶體管理單元}-用於改進虛擬位址到實體位址的轉譯速度。目前所有的桌上型及伺服器型處理器（如 x86）皆使用TLB。TLB具有固定數目的空间槽，用于存放將虛擬地址映射至物理地址的分頁表条目。為典型的結合存儲（content-addressable memory, CAM）。其搜尋鍵碼為虛擬記憶體位址，其搜尋結果為實體位址。如果請求的虚拟位址在TLB中存在，CAM 将给出一个非常快速的匹配结果，之後就可以使用得到的-{zh-hans:物理地址;zh-hant:實體位址}-存取記憶體。如果請求的虚拟位址不在 TLB 中，就會使用分頁表进行虚实地址转换，而分頁表的存取速度比TLB慢很多。有些系统允许分頁表被交换到次級存储器，那么虚实地址转换可能要花非常长的时间。

 概觀 
TLB 用于缓存一部分分頁表条目。TLB可介於CPU和 CPU缓存之間，或在CPU、缓存和主記憶體之間，這取決於缓存使用的是-{zh-hans:物理寻址;zh-hant:真實}-或是虛擬-{zh-hans:寻址;zh-hant:定址}-。如果缓存是虛擬定址，定址請求將會直接從 CPU 傳送給缓存，然后从缓存访问所需的 TLB 条目。如果缓存使用-{zh-hans:物理;zh-hant:實體}-定址，CPU 會先對每一個記憶體操作進行TLB查尋，並且將取得的-{zh-hans:物理地址;zh-hant:實體位址}-傳送給缓存。两种方法各有优缺点。

采用-{zh-hans:物理寻址;zh-hant:實體定址}-的缓存的一种常見優化，是并行的進行 TLB 查尋和缓存的存取。所有虛擬位址的較低位元（例如，在-{zh-hans:虚拟内存;zh-hant:虛擬記憶體}-系統中具有 4KB 分頁時，虛擬位址中較低的那 12 位元）代表的是所請求的位址在分页内部的地址偏移量（页内地址），且這些位元不會在虛擬地址转换到-{zh-hans:物理地址;zh-hant:實體位址}-的過程中發生改變。访问CPU缓存的過程包含兩步：使用一条索引去寻找CPU缓存的資料儲存區中的相应条目，然后比較找到的CPU缓存条目的相应标记。如果缓存是用虚实地址轉譯過程中不變的页内地址來索引组织起来的，則可并行地执行TLB上虚实地址的較高位元(即分页的页间地址／页号）的转换与CPU缓存的「索引」操作。然後，從 TLB 获得的的-{zh-hans:物理地址;zh-hant:實體位址}-的页号會傳送給CPU缓存。CPU缓存會對页号标记進行比較，以決定此次存取是尋中或是缺失。它也有可能并行的進行 TLB 查尋和CPU缓存存取，即使CPU缓存必須使用某些可能會在位址轉譯后發生改變的位元；參閱缓存条目的-{zh-hans:地址翻译;zh-hant:位址轉譯}-一節，以取得關於虛擬定址下缓存和 TLB 的進一步細節。

 -{zh-hans:TLB 不命中;zh-hant:TLB 失誤}- 
兩種在現代-{zh-hans:体系结构;zh-hant:架構}-中常用的解決 -{zh-hans:TLB 不命中;zh-hant:TLB 失誤}-的方案：
 硬體式 TLB 管理，CPU 自行遍历分頁表，查看是否存在包含指定的虛擬位址的有效分頁表条目。如果存在这样的分页表条目，就把此分页表条目存入 TLB ，並重新执行 TLB 访问，而此次访问肯定會尋中，程式可正常執行。如果 CPU 在分頁表中不能找到包含指定的虛擬位址有效条目，就會發生分頁錯誤-{zh-hans:异常;zh-hant:例外}-，作業系統必須處理這個-{zh-hans:异常;zh-hant:例外}-。處理分頁錯誤通常是把被請求的数据载入-{zh-hans:物理;zh-hant:實體}-記憶體中，並在分頁表中建立将出錯的虛擬位址映射到正確的-{zh-hans:物理;zh-hant:實體}-位址的相应条目，並重新啟動程式（詳見分頁錯誤）。
 軟體管理式 TLB，-{zh-hans:TLB 不命中;zh-hant:TLB 失誤}-時會產生「TLB 失誤」-{zh-hans:异常;zh-hant:例外}-，且作業系統遍历分頁表，以軟體方式進行虚实地址轉譯。然後作業系統將分页表中响应的条目載入 TLB 中，然后從引起 TLB 失誤的指令處重新啟動程式。如同硬體式 TLB 管理，如果作業系統在分頁表中不能找到有效的虚实地址轉譯条目，就會發生分頁錯誤，作業系統必須進行相應的處理。

 典型的 TLB 
 容量：12 - 4,096 分页表条目
 尋中時間：0.5 - 1 時脈週期
 -{zh-hans: 不命中;zh-hant: 失誤}-代價：10 - 30 時脈週期
 -{zh-hans: 不命中;zh-hant: 失誤}-率: 0.01% - 3%

假如在TLB 尋找需要 1 個時脈週期，而若在TLB找不到(miss hit)需要額外花 30 個時脈週期去尋找，而且miss hit的機率是 1%，則有效的記憶體访问週期的平均值是  個時脈週期／每一記憶體存取。

指令与数据可以分别使用不同的TLB ，即Instruction TLB (ITLB)与 Data TLB (DTLB)，或者指令与数据使用统一的TLB，即Unified TLB (UTLB)，再或者使用分块的TLB (BTLB)。

 -{zh-hans:上下文切换;zh-hant:上下文交換}- 
在-{zh-hans:上下文切换;zh-hant:上下文交換}-（context switch）部分 TLB 条目可能會失效，例如先前執行的-{zh-hans: 进程;zh-hant: 行程}-已访问过一个页面，但是将要执行的-{zh-hans: 进程;zh-hant: 行程}-尚未访问此页面。最簡單的策略是清出整個 TLB。較新的 CPU 已有更多有效的策略；例如在 Alpha EV6 中，每一個 TLB 条目會有一個「位址空間號碼」（address space number，ASN）的標記，而且只有符合目前工作的 ASN 的 TLB 条目才會被視為有效。

 AMD Phenom 
AMD Phenom CPU的B2版本存在一個TLB問題。如果改以軟體方式解決這個問題（如BIOS更新），這將會損失10-30%的效能。為此，AMD另外推出B3版本的Phenom處理器，在硬體電路上修正此問題，克服了B2版本Phenom處理器效能減少的問題。

 參考 
 Virtual Memory in the IA-64 Kernel > Translation Lookaside Buffer 
 Virtual Translation Lookaside Buffer

 外部連結 
 記憶體管理／分頁架構 
 处理器的存储子系统（三）-- 页表和TLB 
 处理器的存储子系统（一）--概述 

 參閱 
 記憶體管理
 分頁

Category:虛擬記憶體
Category:電腦記憶體
Category:中央處理器