新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM中MMU之地址轉(zhuǎn)換

ARM中MMU之地址轉(zhuǎn)換

作者: 時(shí)間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
最近看了看mmu,找了好多資料,看了好多博文終于稍微清楚了一點(diǎn),現(xiàn)在我把自己理解的內(nèi)容總結(jié)一下:

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

本文引用地址:http://m.butianyuan.cn/article/201611/317860.htm

下面我來說一下ARM CPU上的地址轉(zhuǎn)換過程涉及三個(gè)概念:虛擬地址(VA)(CPU內(nèi)核對外發(fā)出VA),變換后的虛擬地址(MVA)(VA被轉(zhuǎn)換為MVA供cache和MMU使用,在此將MVA轉(zhuǎn)換為PA),物理地址(PA)(最后使用PA讀寫實(shí)際設(shè)備)。

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

(2)而cache、MMU也是看不到VA的,它們使用的是MVA(VA到MVA的轉(zhuǎn)換是由硬件自動完成的);

(3)實(shí)際設(shè)備看不到VA、MVA,讀寫設(shè)備使用的是PA物理地址。

前期的鋪墊基本完成,接下來進(jìn)入重點(diǎn)。

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

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

2、虛擬地址MVA。

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

1、無論進(jìn)行那種有效轉(zhuǎn)換都必須進(jìn)行一級頁表的轉(zhuǎn)換,所以我們先去產(chǎn)生一級頁表。產(chǎn)生一級頁表經(jīng)過以下步驟

a) 由協(xié)處理器CP15中的寄存器C2(高18位,即[31:14]為轉(zhuǎn)換表基地址,低14位為0)為一級轉(zhuǎn)換表基地址,即TTB該地址指向了一個(gè)2^14=16KB大小的存儲區(qū),即一級轉(zhuǎn)換表。

b) 將MVA的高12位,即位[31:20]作為一級轉(zhuǎn)換表的地址索引,因此一級轉(zhuǎn)換表具有2^12=4096項(xiàng),這4096項(xiàng)的地址為32位,最高的18位[31:14]為寄存器C2的高18位,中間12位為MVA的高12位[31:20],最低2位為0b00。這4096項(xiàng)中的內(nèi)容稱為一級描述符。至此一級頁表產(chǎn)生完畢。

2、mmu拿到一級描述符首先看它的后兩位也就是bits[1:0],根據(jù)這兩位的取值mmu會進(jìn)入不同的轉(zhuǎn)換模式,這兩位會出現(xiàn)下面四種取值。其中這四種取值分別對應(yīng)四種模式,下面我一一解釋。

a) 00 無效不進(jìn)行轉(zhuǎn)換

b) 01 進(jìn)行粗頁式轉(zhuǎn)換

c) 10 進(jìn)行段式轉(zhuǎn)換

d) 11 進(jìn)行細(xì)頁式轉(zhuǎn)換

3、接下來對于不同的轉(zhuǎn)換模式,就要進(jìn)行不同的轉(zhuǎn)換。我下面將對三種轉(zhuǎn)換模式進(jìn)行一一分析。

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

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

b) 0b11(細(xì)頁式轉(zhuǎn)換)

細(xì)頁式轉(zhuǎn)換,它是將我們剛才產(chǎn)生的一級描述符的高20位bits[31:12],再加上MVA的bits[19:10](第二級表索引)合體,bits[1:0]補(bǔ)0,獲取第二級描述符的地址,至此其一級轉(zhuǎn)換結(jié)束,因?yàn)槠涠夀D(zhuǎn)換方式和粗頁式的二級轉(zhuǎn)換方式相同所以我下面一塊分析。

c) 0b01(粗頁式轉(zhuǎn)換)

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

4、下面我們將進(jìn)入二級轉(zhuǎn)換,對于二級轉(zhuǎn)換只針對細(xì)頁式和粗頁式,沒有段式轉(zhuǎn)換。

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

i. 00 無效不進(jìn)行轉(zhuǎn)換

ii. 01 大頁描述符

iii. 10 小頁描述符

iv. 11 極小頁描述符

b) 接下來我將對各個(gè)模式進(jìn)行分析。

i. 01(大頁描述符)

此時(shí)我們?nèi)〕龆壝枋龇械腷its[31:16]——大頁基址,它和MVA的bits[15:0]組成一個(gè)32位的物理地址,這就是MVA對應(yīng)的PA。

ii. 10(小頁描述符)

此時(shí)我們?nèi)〕龆壝枋龇械腷its[31:12]與MVA的bits[11:0]組成一個(gè)32位的地址,這就是MVA對應(yīng)的PA。

iii. 11(極小頁描述符)

此時(shí)我們?nèi)〕龆壝枋龇械腷its[31:10]與MVA的bits[9:0]組成一個(gè)32位的地址,這就是MVA對應(yīng)的PA。

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



關(guān)鍵詞: ARMMMU地址轉(zhuǎn)

評論


技術(shù)專區(qū)

關(guān)閉