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