MMU位址對映過程

2021-07-27 21:00:53 字數 3303 閱讀 5176

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

最近看了看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對虛擬位址轉換到實體地址的過程,本人第一次寫學習筆記,還有很多不足之處還請各位前輩指教,謝謝各位。

MMU段式對映(VA PA)過程分析

mmu 記憶體管理單元。cpu定址的方式 變成實際的實體地址去定址。那麼是mmu是如何實現va到pa的轉化的呢?建立va與pa的對應關係 mmu有段描述符 1m 還有頁描述符大頁 64kb 小頁 4kb 和極小頁 1kb 我們這裡說段頁表的建立。比如32位cpu,4g的定址空間可分為4094個段 4...

MMU 建立對映

s3c2410的mmu講解 s3c2410總共有4種記憶體對映方式,分別是 1 fault 無對映 2 coarse page 粗表 3 section 段 4 fine page 細表 我們以section 段 進行說明。arm920t是乙個32bit的cpu,它的虛擬位址空間為2 32 4g。而...

arm32頁表對映過程(一)

在完成前面memory size的初始化之後,下面就是頁表的映 具體過程如下 start kernel setup arch paging init void init paging init const struct machine desc mdesc 1 主要是mem type的初始化。2 呼...