ARM中MMU之地址轉換

第一次發帖略微有點激動,有不足的地方還請各位大神指教。

 

最近看了看mmu,找了好多資料,看了好多博文終於稍微清楚了一點,現在我把自己理解的內容總結一下:

 

首先我來說一下MMU的作用,MMU就是負責虛擬地址(virtual address)轉化成物理地址(physical address)。

下面我來說一下ARM CPU上的地址轉換過程涉及三個概念:虛擬地址(VA)(CPU內核對外發出VA),變換後的虛擬地址(MVA)(VA被轉換爲MVAcacheMMU使用,在此將MVA轉換爲PA),物理地址(PA)(最後使用PA讀寫實際設備)。

 

(1)CPU看到的用到的只是VACPU不管VA最終是怎樣到PA的;

 

(2)cacheMMU也是看不到VA的,它們使用的是MVAVAMVA的轉換是由硬件自動完成的);

 

(3)實際設備看不到VAMVA,讀寫設備使用的是PA物理地址。

 

前期的鋪墊基本完成,接下來進入重點。

在此過程中要用到以下兩個必備的東西:

1、cp15協處理器的c2寄存器(這個裏面的東西需要程序員自己裝載)

2、虛擬地址MVA

接下來我說以下mmu對虛擬地址到物理地址的轉化過程。

1、無論進行那種有效轉換都必須進行一級頁表的轉換,所以我們先去產生一級頁表。產生一級頁表經過以下步驟

        a)     由協處理器CP15中的寄存器C2(高18位,即[3114]爲轉換表基地址,低14位爲0)爲一級轉換表基地址,即TTB該地址指向了一個2^14=16KB大小的存儲區,即一級轉換表。

        b)    MVA的高12位,即位[31:20]作爲一級轉換表的地址索引,因此一級轉換表具有2^12=4096項,4096項的地址32位,最高的18[3114]爲寄存器C2的高18位,中間12位爲MVA的高12[31:20],最低2位爲0b00。這4096項中的內容稱爲一級描述符。至此一級頁表產生完畢。

2、mmu拿到一級描述符首先看它的後兩位也就是bits[1:0],根據這兩位的取值mmu會進入不同的轉換模式,這兩位會出現下面四種取值。其中這四種取值分別對應四種模式,下面我一一解釋。

        a)     00          無效不進行轉換

        b)    01          進行粗頁式轉換

        c)     10          進行段式轉換

        d)    11          進行細頁式轉換


3、接下來對於不同的轉換模式,就要進行不同的轉換。我下面將對三種轉換模式進行一一分析。

 

        a)     0b10(段式轉換),把段式轉換放在第一個說的原因是在ARM中大量用到了段式和細頁式轉換。

段式轉換是最簡單的一種轉換方式,它是將我們剛纔產生的一級描述符(即4096項中的內容)的高12位作爲段的基地址,用MVA的低20位作爲每個段的偏移量,由此我們可以輕鬆的推出每個段的大小爲2^20=1MB,至此我們就得到了一個物理地址PA

        b)    0b11(細頁式轉換)

細頁式轉換,它是將我們剛纔產生的一級描述符的高20bits[31:12],再加上MVAbits[19:10](第二級表索引)合體,bits[1:0]0,獲取第二級描述符的地址,至此其一級轉換結束,因爲其二級轉換方式和粗頁式的二級轉換方式相同所以我下面一塊分析。

        c)     0b01(粗頁式轉換)

粗頁式轉換,它是將我們剛纔產生的一級描述符的高22bits[31:10],再加上MVAbits[19:12](第二級表索引)合體,最後兩位補0,獲取第二級描述符的地址(32位),至此其一級轉換結束。

4、下面我們將進入二級轉換,對於二級轉換隻針對細頁式和粗頁式,沒有段式轉換。

        a)     經過一級轉換我們得到了二級描述符的地址,我們通過此地址可以得到二級描述符,我們根據二級描述符的低兩位bits[1:0]同樣可以分爲四種轉換模式:

                         i.         00          無效不進行轉換

                        ii.         01          大頁描述符

                       iii.         10          小頁描述符

                       iv.         11          極小頁描述符

        b)    接下來我將對各個模式進行分析。

                         i.         01(大頁描述符)

此時我們取出二級描述符中的bits[31:16]——大頁基址,它和MVAbits[15:0]組成一個32位的物理地址,這就是MVA對應的PA

                        ii.         10(小頁描述符)

此時我們取出二級描述符中的bits[31:12]MVAbits[11:0]組成一個32位的地址,這就是MVA對應的PA

                       iii.         11(極小頁描述符)

此時我們取出二級描述符中的bits[31:10]MVAbits[9:0]組成一個32位的地址,這就是MVA對應的PA

以上就是MMU對虛擬地址轉換到物理地址的過程,本人第一次寫學習筆記,還有很多不足之處還請各位前輩指教,謝謝各位。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章