新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM中MMU之地址轉換

        ARM中MMU之地址轉換

        作者: 時間:2016-11-09 來源:網絡 收藏
        最近看了看mmu,找了好多資料,看了好多博文終于稍微清楚了一點,現在我把自己理解的內容總結一下:

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

        本文引用地址:http://www.104case.com/article/201611/317860.htm

        下面我來說一下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對虛擬地址轉換到物理地址的過程,本人第一次寫學習筆記,還有很多不足之處還請各位前輩指教,謝謝各位。



        關鍵詞: ARMMMU地址轉

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 洪泽县| 丰都县| 栾城县| 磐石市| 额尔古纳市| 东乡县| 太保市| 枞阳县| 望谟县| 东光县| 栖霞市| 晋中市| 绥中县| 利辛县| 天长市| 远安县| 禄丰县| 云浮市| 涟源市| 万源市| 安化县| 柘荣县| 抚宁县| 拉萨市| 白河县| 道孚县| 卢湾区| 观塘区| 三门峡市| 临朐县| 安新县| 健康| 大关县| 浮梁县| 洪江市| 康定县| 聂荣县| 社会| 泌阳县| 青州市| 远安县|