ARM中MMU之位址轉換

2021-06-22 07:45:54 字數 2832 閱讀 7096

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

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

首先我來說一下mmu

的作用,

mmu就是負責虛擬位址(

virtual address

)轉化成實體地址(

physical address

)。下面我來說一下

arm cpu

va)(

cpu核心對外發出

va),變換後的虛擬位址(

mva)(

va被轉換為

mva供

cache

和mmu

使用,在此將

mva轉換為

pa),實體地址(

pa)(最後使用

pa讀寫實際裝置)。

(1)cpu

看到的用到的只是va,

cpu不管

va最終是怎樣到

pa的;

(2)而

cache

、mmu

也是看不到

va的,它們使用的是

mva(va到

mva的轉換是由硬體自動完成的);

(3)實際裝置看不到va、

mva,讀寫裝置使用的是

pa實體地址。

前期的鋪墊基本完成,

接下來進入重點。

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

1、cp15協處理器的c2暫存器(這個裡面的東西需要程式設計師自己裝載)

2、虛擬位址mva。

接下來我說以下mmu對虛擬位址到實體地址的轉化過程。

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

a)     由協處理器cp15中的暫存器c2(高18位,即[31:14]為轉換表基位址,低14位為0)為一級轉換表基位址,即ttb該位址指向了乙個2^14=16kb

大小的儲存區,即一級轉換表。

b)    將

mva的高

12位,即位

[31:20]

作為一級轉換表的位址索引,因此一級轉換表具有

2^12=4096

項,這4096項的位址為32位,最高的18位[31:14]為暫存器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(細頁式轉換)

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

c)     0b01(粗頁式轉換)

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

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

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

i.         00          無效不進行轉換

ii.         01         

大頁描述符

iii.         10         

小頁描述符

iv.         11         

極小頁描述符

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

i.         01(大頁描述符)

此時我們取出二級描述符中的bits[31:16]——大頁基址,它和mva的bits[15:0]組成乙個32位的實體地址,這就是mva對應的pa。

ii.         10(小頁描述符)

此時我們取出二級描述符中的bits[31:12]

與mva

的bits[11:0]

組成乙個

32位的位址,這就是

mva對應的pa。

iii.         11(極小頁描述符)

此時我們取出二級描述符中的bits[31:10]

與mva

的bits[9:0]

組成乙個

32位的位址,這就是

mva對應的pa。

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

ARM中MMU的作用

mmu的使用 mmu是儲存器管理單元的縮寫,是用來管理虛擬記憶體系統的器件。mmu通常是cpu的一部分,本身有少量儲存空間存放從虛擬位址到實體地址的匹配表。此表稱作tlb 轉換旁置緩衝區 所有資料請求都送往mmu,由 mmu決定資料是在ram內還是在大容量儲存器裝置內。如果資料不在儲存空間內,mmu...

ARM中mmu的對映原理與配置步驟

在mmu啟動之前 1.將ttb放置在cp15的c2的高18位 注 構建一級頁表是對所選的對映進行設定,配置domain ap 等 有關mmu的轉換過程 我的理解 1 虛擬位址中的前12位位址他可以反映本次描述符在一級頁表中的索引 即ttb 前12位位址 2 對於頁對映 一級頁表的前12位存放二級頁表...

linux驅動中位址空間轉換

在linux kernel 中,實體地址是不能直接使用的,必須通過轉換才可以。轉換分為兩種,靜態和動態。靜態就是下面那種,不過,靜態的位址轉換,還需要在kernel 初始化的時候作對映。動態對映是使用 ioremap 函式 cpp view plain copy define sl2312 gpio...