s3c2440 記憶體管理單元MMU學習筆記 (修改中)

來源:互聯網
上載者:User

這幾天學習了S3C2440記憶體管理單元MMU,主要參考了《嵌入式Linux應用開發完全手冊》。網上有兩篇部落格也說得很詳細,分別是http://www.sectop.com/post/83.html與http://cky0612.blog.163.com/blog/static/2747891620101111119250/感興趣的可以參考一下,我就不重複人家的內容了。但是它們在MMU地址變換過程這一塊說得不太好理解。在此,我就按照我的理解將《嵌入式Linux應用開發完全手冊》的相關內容解釋一下,圖片加點注釋。如有錯誤,請大家不吝賜教,我一定馬上改,謝謝。


S3C2440 MMU地址變換過程

1)地址的分類

ARM cpu地址轉換涉及三種地址:虛擬位址(VA,Virtual Address)、變換後的虛擬位址(MVA,Modified Virtual Address)、物理地址(PA,Physical Address)

沒有啟動MMU時,CPU核心,cache,MMU,外設等所有組件使用的都是物理地址。

啟動MMU後,CPU核心對外發出虛擬位址VA;VA被轉換為MVA供cache、MMU使用,在這裡MVA被轉換成PA;最後使用PA讀取實際裝置 

1、CPU核心看到和用到的只是虛擬位址VA,至於VA如果去對應物理地址PA,CPU核心不理會

2、caches和MMU看不到VA,他們利用MVA轉換得到PA

3、實際裝置看不到VA、MVA,讀寫它們使用的是物理地址PA 

MVA是除CPU核心外的其他部分看到的虛擬位址,VA與MVA的變化關係如下:

if (VA  < 32M) then

        MVA = VA | (PID <<25)

else

        MVA = VA

其中PID為進程標識號(通過讀CP15的C13獲得)。

使用MVA,而不使用VA的目的是:當有重疊的VA時,轉換後的MVA地址並不重疊,減小轉換為PA的代價

比如兩個進程1、2,VA都是0-(32M-1),則MVA分別為0x02000000-0x03ffffff,0x04000000-0x05ffffff。

下文說到虛擬位址,如果沒有特別指出,就是指MVA

2)虛擬位址到物理地址的轉換過程

arm cpu使用頁表來進行轉換。頁表由一個個描述符(每個4位元組,32位)組成,每個描述符儲存一段虛擬位址對應的物理地址及存取權限,或者下一級頁表的地址

S3C2440可以以段(Section)的方式或頁(Page)的方式進行轉換。其中以段的方式進行轉換時只用到一級頁表,以頁的方式進行轉換時需用到兩級頁表:二級頁表可分為粗頁表、細頁表;二級頁表的映射按大小可映射大頁(Large page 64KB)、小頁(Small page 4KB)、極小頁(Tiny page 1KB)。

為S3C2440的地址轉換圖(自己加了些東西,若有誤,請指正,感激不盡)


需要注意的是:

1、粗頁表只能映射大頁和小頁,細頁表可以映射大頁、小頁和極小頁。

2、TTBbase代表一級頁表的地址,它由副處理器CP15的寄存器C2(稱為頁表基底位址暫存器)和MVA拼合產生。頁表基底位址暫存器的地址必須16K對齊( [31:14]位儲存頁表基址,[13:0]為0)。

頁表基底位址暫存器結構如下


3、一級頁表使用4096個描述符來表示4GB空間。每個描述符儲存它對應的1MB的物理空間的起始地址(段),或者下一級頁表的地址。

概括的說一下MMU定址的主要過程

首先由頁表基底位址暫存器的[31:14]位和MVA的[31:20]位拼合成一個低兩位為0的32位地址,MMU根據此地址在一級頁表查詢。接下來根據轉換方式不同後續步驟有所不同。

若以段的方式轉換, MMU在一級頁表查詢到段描述符。將段描述符的 [31:20]位(段基址),和MVA的[19:0]位組成一個32位的物理地址即MVA對應的PA。

若以頁的方式(假設二級頁表為粗頁表,儲存的是大頁描述符)轉換,MMU在一級頁表查詢到粗頁表描述符。取出粗頁表描述符的[31:10](即粗頁表基址)位,和MVA的[19:12]位組成一個低兩位為0的32位物理地址,通過這個地址在二級頁表找到大頁描述符。取出大頁描述符的[31:16](即大頁基址)位,和MVA[15:0]位組成一個32位的物理地址,即MVA對應的PA(其他形式只是拼接的位元略有不同、將在下面詳細介紹)。

下面詳細介紹下各級頁表描述符的格式

一級頁表描述符


最低兩位:0b00:無效0b01:粗頁表(Coarse page table)[31:10]為粗頁表基址,此描述符低10位填充0後就是一個二級頁表的物理地址,二級頁表含256個條目(使用[9:2],2^8=256個),稱為粗頁表(Coarse page table)。其中每個條目表示4KB大小的物理地址空間,一個粗頁表表示1MB物理地址0b10:段(Section)[31:20]為段基址,此描述符低20位填充0後就是一塊1MB物理地址空間的起始地址。MVA[19:0],用來在這1MB空間中定址。描述符的位[31:20]和MVA[19:0]構成了這個虛擬位址MVA對應的物理地址以段的方式進行映射時,虛擬位址MVA到物理地址PA的轉換過程如下:1、頁表基底位址暫存器位[31:14]和MVA[31:20]組成一個低兩位為0的32位地址,MMU利用這個地址找到段描述符2、取出段描述符的位[31:20](段基址),它和MVA[19:0]組成一個32位的物理地址(這就是MVA對應的PA)

0b11:細頁表(Fine page table)

[31:12]為細頁表基址(Fine page table base address),此描述符的低12位填充0後,就是一個二級頁表的物理地址。此二級頁表含1024個條目(使用[11:2],10位),其中每個條目表示大小1kb的物理地址空間,一個細頁表表示1MB物理地址空間


二級頁表描述符

最低兩位:

0b00:無效 0b01:大頁描述符位[31:16]為大頁基址,此描述符的低16位填充0後就是一塊64KB物理地址空間的起始地址粗頁表中的每個條目只能表示4KB物理空間,如果大頁描述符儲存在粗頁表中,則連續16個條目都儲存同一個大頁描述符。類似的,細頁表中每個條目只能表示1KB的物理空間,如果大頁描述符儲存在細頁表中,則連續64個條目都儲存同一個大頁描述符。下面以儲存在粗頁表中的大頁描述符為例,說明地址轉化那過程1、頁表基底位址暫存器[31:14]和MVA[31:20]組成一個低兩位為0的32位地址,MMU利用這個地址找到粗頁表描述符2、取出粗頁表描述符的[31:10](即粗頁表基址),它和MVA[19:12]組成一個低兩位為0的32位物理地址,通過這個地址找到大頁描述符3、取出大頁描述符的[31:16](即大頁基址),它和MVA[15:0]組成一個32位的物理地址,即MVA對應的PA步驟2和3中,用於在粗頁表中索引的MVA[19:12]、用於在大頁內定址的MVA[15:0]有重合的位[15:12],當位[15:12]從0b0000變化到0b1111時,步驟2得到的大頁描述符相同,所以粗頁表中有連續16個條目儲存同一個大頁描述符

0b10:小頁描述符

[31:12]為小頁基址(Small page base address),此描述符的低12位填充0後就是一塊4kb([11:0],一共12位,2^12=4096)物理地址空間的起始地址。粗頁表中每個條目表示4kb的物理空間,如果小頁描述符儲存在粗頁表中,則只需要用一個條目來儲存一個小頁描述符。類似的,細頁表中每個條目只能表示1kb的物理空間,如果小頁儲存在細頁表中,則連續4個條目都儲存同一個小頁描述符。

下面以儲存在粗頁表中的小頁描述符為例,說明地址轉換過程:

1、頁表基址[31:14]和MVA[31:20]組成一個低兩位為0的32位地址,MMU利用這個地址找到粗頁表描述符

2、取出粗頁表描述符[31:10](即粗頁表基址),它和MVA[19:12]組成一個低兩位為0的32位物理地址,用這個地址找到小頁描述符

3、取出小頁描述符的位[31:12](即小頁基址),它和MVA[11:0]組成一個32位物理地址(即MVA對應的PA)

小頁描述符儲存在細頁表中,地址轉換過程和上面類似。

0b11:極小頁描述符

[31:10]為極小頁基址(Tiny page base address),此描述符的低10位填充0後就是一塊1KB物理地址空間的起始地址。極小頁描述符只能儲存在細頁表中,用一個條目來儲存一耳光極小頁描述符

下面是極小頁的地址轉換過程:

1、頁表基底位址暫存器[31:14]和MVA[31:20]組成一個低兩位為0的32位地址,MMU通過這個地址找到細頁表描述符

2、取出細頁表描述符[31:12](即細頁表基址),它和MVA[19:10]組成一個低兩位為0的32位物理地址,通過這個地址即可找到極小頁描述符

3、取出極小頁描述符[31:10](即極小頁基址),它和MVA[9:0]組成一個32位的物理地址(即MVA對應的PA)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.