TLB:Translation Lookaside Buffer.
根據(jù)功能可以譯為快表,直譯可以翻譯為旁路轉(zhuǎn)換緩沖,也可以把它理解成頁(yè)表緩沖。里面存放的是一些頁(yè)表文件(虛擬地址到物理地址的轉(zhuǎn)換表)。當(dāng)處理器要在主內(nèi)存尋址時(shí),不是直接在內(nèi)存的物理地址里查找的,而是通過一組虛擬地址轉(zhuǎn)換到主內(nèi)存的物理地址,TLB就是負(fù)責(zé)將虛擬內(nèi)存地址翻譯成實(shí)際的物理內(nèi)存地址,而CPU尋址時(shí)會(huì)優(yōu)先在TLB中進(jìn)行尋址。處理器的性能就和尋址的命中率有很大的關(guān)系。
映射機(jī)制必須使一個(gè)程序能斷言某個(gè)地址在其自己的進(jìn)程空間或地址空間內(nèi),并且能夠高效的將其轉(zhuǎn)換為真實(shí)的物理地址以訪問內(nèi)存。一個(gè)方法是使用一個(gè)含有整個(gè)空間內(nèi)所有頁(yè)的入口(entry)的表(即頁(yè)表),每個(gè)入口包含這個(gè)頁(yè)的正確物理地址。這很明顯是個(gè)相當(dāng)大的數(shù)據(jù)結(jié)構(gòu),因而不得不存放于主存之中。
由于CPU首先接到的是由程序傳來的虛擬內(nèi)存地址,所以CPU必須先到物理內(nèi)存中取頁(yè)表,然后對(duì)應(yīng)程序傳來的虛擬頁(yè)面號(hào),在表里找到對(duì)應(yīng)的物理頁(yè)面號(hào),最后才能訪問實(shí)際的物理內(nèi)存地址,也就是說整個(gè)過程中CPU必須訪問兩次物理內(nèi)存(實(shí)際上訪問的次數(shù)更多)。因此,為了減少CPU訪問物理內(nèi)存的次數(shù),引入TLB。
====================================================
cpu 內(nèi)存
TLB <============================> 內(nèi)存頁(yè)表
L1 Cache <=====>L2 Cache<=========> 內(nèi)存數(shù)據(jù)
====================================================
TLB種類
TLB在X86體系的CPU里的實(shí)際應(yīng)用最早是從Intel的486CPU開始的,在X86體系的CPU里邊,一般都設(shè)有如下4組TLB:
第一組:緩存一般頁(yè)表(4K字節(jié)頁(yè)面)的指令頁(yè)表緩存(Instruction-TLB);
第二組:緩存一般頁(yè)表(4K字節(jié)頁(yè)面)的數(shù)據(jù)頁(yè)表緩存(Data-TLB);
第三組:緩存大尺寸頁(yè)表(2M/4M字節(jié)頁(yè)面)的指令頁(yè)表緩存(Instruction-TLB);
第四組:緩存大尺寸頁(yè)表(2M/4M字節(jié)頁(yè)面)的數(shù)據(jù)頁(yè)表緩存(Instruction-TLB);
圖中可見,當(dāng)CPU執(zhí)行機(jī)構(gòu)收到應(yīng)用程序發(fā)來的虛擬地址后,首先到TLB中查找相應(yīng)的頁(yè)表數(shù)據(jù),如果TLB中正好存放著所需的頁(yè)表,則稱為TLB命中(TLB Hit),接下來CPU再依次看TLB中頁(yè)表所對(duì)應(yīng)的物理內(nèi)存地址中的數(shù)據(jù)是不是已經(jīng)在一級(jí)、二級(jí)緩存里了,若沒有則到內(nèi)存中取相應(yīng)地址所存放的數(shù)據(jù)。如果TLB中沒有所需的頁(yè)表,則稱為TLB失敗(TLB Miss),接下來就必須訪問物理內(nèi)存中存放的頁(yè)表,同時(shí)更新TLB的頁(yè)表數(shù)據(jù)。
既然說TLB是內(nèi)存里存放的頁(yè)表的緩存,那么它里邊存放的數(shù)據(jù)實(shí)際上和內(nèi)存頁(yè)表區(qū)的數(shù)據(jù)是一致的,在內(nèi)存的頁(yè)表區(qū)里,每一條記錄虛擬頁(yè)面和物理頁(yè)框?qū)?yīng)關(guān)系的記錄稱之為一個(gè)頁(yè)表?xiàng)l目(Entry),同樣地,在TLB里邊也緩存了同樣大小的頁(yè)表?xiàng)l目(Entry)。由于頁(yè)表?xiàng)l目的大小總是固定不變的,所以TLB的容量越大,則它所能存放的頁(yè)表?xiàng)l目數(shù)越多(類似于增大CPU一級(jí)、二級(jí)緩存容量的作用),這就意味著緩存命中率的增加,這樣,就能大大減少CPU直接訪問內(nèi)存的次數(shù),實(shí)現(xiàn)了性能提升。
4. TLB的聯(lián)合方式:
TLB內(nèi)部存儲(chǔ)空間被劃分為大小相同的塊(即TLB頁(yè)表?xiàng)l目),這些塊的大小=內(nèi)存的頁(yè)表區(qū)里頁(yè)表?xiàng)l目的大小.
所以,就可以在TLB頁(yè)表?xiàng)l目和內(nèi)存頁(yè)表?xiàng)l目間建立一定的相互對(duì)應(yīng)關(guān)系。當(dāng)CPU需要頁(yè)表數(shù)據(jù)時(shí),它必須迅速做出如下的2個(gè)判斷:一個(gè)是所需要的頁(yè)表是否已緩存在TLB內(nèi)部(即判斷TLB命中或是失敗),另一個(gè)是所需要的頁(yè)表在TLB內(nèi)的哪個(gè)條目?jī)?nèi)。為了盡量減少CPU做出這些判斷所需的時(shí)間,就必須在TLB頁(yè)表?xiàng)l目和內(nèi)存頁(yè)表?xiàng)l目之間的對(duì)應(yīng)方式上動(dòng)點(diǎn)腦筋,下面是幾種常見的對(duì)應(yīng)關(guān)系。
名稱
|
方式
|
應(yīng)用
|
全聯(lián)合方式
|
內(nèi)存頁(yè)表里的任何一個(gè)條目都可能被對(duì)應(yīng)(緩存)到TLB的任何一個(gè)條目,TLB內(nèi)所有條目都可能被對(duì)應(yīng)到內(nèi)存頁(yè)表里的所有條目上。
|
Athlon XP在L1 指令TLB部分全是這種方式
|
4路聯(lián)合方式
|
只有內(nèi)存頁(yè)表區(qū)的某些條目可能被緩存到TLB的某4個(gè)頁(yè)表?xiàng)l目所在的塊上。
|
P4處理器一般采用這種方式
|