常見架構TLB miss處理方法(轉)


轉自網站:http://blog.sina.com.cn/s/blog_633f462901018reb.html

0.       綜述

總的來說TLB miss處理分為硬件處理和軟件處理兩種,硬件處理代表架構為X86,X86-64,IBM VM370;軟件處理代表為: MIPS, SPARC, Alpha;同時兼容軟硬件處理的架構:PowerPC。以下便簡要介紹各個架構的TLB MISS處理過程及其特性。

 

1.       ARM架構

ARM架構的TLB雖然程序員可見,但是並不能像MIPS架構那樣可以顯示的向TLB中寫入固定的內容,TLB缺失重填過程是由硬件來完成的,具體過程如下:(參考:<<ARM920TMMUCache>>文章)

1)  ARMMMUCache集成在15號協處理器中。其中第2號寄存器存着頁表的基地址(TTB);第8號寄存器提供了TLB invalidTLB操作;第10號寄存器提供了TLB鎖定操作。

2)  TTB中的內容為基地址,以VA[31:20]為索引在表中查出第二級頁表(Coarse Page Table)的基地址,同樣是物理地址,也就是說第二級頁表也是直接按這個地址存在物理內存中的。

3)  VA[19:12]為索引在第二級頁表中查出物理頁面的基地址加上VA[11:0]這個偏移量就可以取出相應地址上的數據。

4)  過程稱為Translation Table WalkTTB走到一級頁表,又走到二級頁表,又走到物理頁面,一次尋址其實是三次訪問物理內存。注意這個的過程完全是硬件做的,每次CPU尋址時MMU就自動完成以上四步,不需要編寫指令指示MMU去做,前提是操作系統要維護頁表項的正確性,每次分配內存時填寫相應的頁表項,每次釋放內存時清除相應的頁表項,在必要的時候分配或釋放整個頁表。

5)  除了硬件TTW,CP15的8號寄存器支持的TLB操作如下:

a)         無效指令TLB

b)         無效指令單一入口

c)         無效整個數據TLB

d)         無效數據單一入口

e)         無效所有TLB

因此由上面分析可以看到ARM的類似X86架構是硬件完成TLB重填,而且不能顯示訪問TLB的每一項。

 

2.       SPARC架構

SPARC架構類似MIPS,使用的是軟件管理TLB重填異常,TLB中也擁有區分不同地址空間的標識符 context id,是否使用特權級是根據操作模式和TRAP LEVEL決定的。SPARC的TLB重填異常如下:

1)   發生TLB異常時陷入操作系統

2)   操作系統首先查詢TSB中是否存在缺失項

a)         如果有load到TLB中

b)         如果沒有則執行TSB缺失函數

3)   SPARC訪問TLB的命令是ldxa,stxa等,具體方式見linux內核中 arch/sparc/ kernel/itlb_miss.S文件中填充TLB的部分

 

 

3.       POWERPC架構

POWERPC架構的TLB MISS有硬件查詢的部分有軟件查詢的部分。其TLB MISS處理的方式如下,一共兩輪查詢

1)  首先查詢處理器中的DBAT和IBAT寄存器,這些寄存器只有4或8個,用於映射內核地址,最大能映射到256M。如果這次查詢成功則不進行下輪查詢。

2)  若第一次查詢不成功,則進行第二輪查詢,這輪查詢不一定被所有的類型的POWERPC處理器支持,查詢中首先通過段寄存器獲得一個52位地址。這52位線性地址使用hash表存放其頁表。硬件獲得52地址對應的hash值,查詢頁表。如果不存在則解決hash 沖突繼續查,如果繼續查不中則陷入到OS中進行處理。

3)  POWERPC G1系列不支持查詢hash表,而使用軟件方式查詢標准頁表,之后寫入TLB;G2~G4系列均采用硬件查詢hash表。最新的POWERPC處理器支持兩種方式選擇。

4)  POWERPC系列訪問TLB指令類似tlbre, tlbwe等,有點類似MIPS。

 

4.       Alpha架構

Alpha同樣使用軟件TLB重填,同樣具有ASID用於保證TLB中存在不同地址空間的項。但是Alpha的TLB重填很奇特,使用機器碼來完成三級頁表的查詢,換句話說Alpha的TLB miss重填函數固化在機器碼中。

 

5.       X86,x86-64架構

X86使用的是硬件頁表查詢,特點是:

1)   操作系統並不知道有TLB存在

2)   CPU保證TLB和頁表一致性。即當頁表改變或者切換時需要刷新TLB。

3)   TLB中不存在ASID。

4)   OS不能單一操作某一TLB表項,只能通過INVLPG指令無效整個TLB。

5)   X86的硬件page table walk過程略~

 

6.       MIPS架構

MIPS使用的是軟件TLB miss方法,使用ASID區分不同的用戶空間。具體過程如下:

1)  訪問地址TLB不存在時候,陷入內核產生TLB miss異常。

2)  TLB miss 處理函數查詢三級頁表獲得地址並填入TLB

3)  MIPS架構中訪問TLB指令時:tlbwi,tlbri等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM