世界一下變大了 MMU 的使用

2021-07-29 18:26:31 字數 1840 閱讀 4565

memory management unit 記憶體管理單元

有mmu單元是arm晶元和微控制器的重要區別之一。

1、將虛擬位址轉化為實體地址

2、訪問許可權管理

當mmu關閉時,虛擬位址等於實體地址,但是當程式比較複雜時,必須使用mmu,程式中使用的都是虛擬位址。

mmu的使用如下圖所示:

2440、6410和210有相同的mmu的工作原理,即虛擬位址向實體地址的轉換方式相同。

轉換圖如下所示:

mmu的目的就是實現將32位虛擬位址轉化為真正的實體地址。

ttb暫存器

mmu要自動進行虛擬位址到實體地址的轉化,首先要找到一級頁表,而一級頁表的基位址(ttb:translation table base)則是儲存在cp15的c2暫存器中。因此,當程式設計師建立好相應的頁表後,需要將頁表基位址寫入該暫存器。

一級頁表的結構:

一級頁表由工程師建立,儲存在記憶體中,基位址存放在cp15的c2暫存器中。

段式轉化分析

如果一級頁表項中最後兩位為『10』,接下的來轉化過程將按照段方式來進行。

每個段是1mb,2^20b

細頁轉化

如果一級頁表項中最後兩位為』11』,接下的來轉化過程將按照細頁方式來進行。

參看上面的大

段方式:

1、建立一級頁表

2、寫入ttb

3、開啟mmu

**編寫:

//用於mmu段式轉換的的一些巨集定義,一級頁表中的內容

#define mmu_full_access (3 << 10) /* 訪問許可權,可讀可寫 */

#define mmu_domain (0 << 5) /* 屬於哪個域,放在0域 */

#define mmu_special (1 << 4) /* 必須是1 */

#define mmu_cacheable (1 << 3) /* cacheable */

#define mmu_bufferable (1 << 2) /* bufferable */

#define mmu_section (2) /* 表示這是段描述符 */

#define mmu_secdesc (mmu_full_access | mmu_domain | mmu_special | mmu_section)

#define mmu_secdesc_wb (mmu_full_access | mmu_domain | mmu_special | mmu_cacheable | mmu_bufferable | mmu_section)

//section description

void creat_page_table()

}void mmu_init() /* 使用儲存器管理單元mmu */

讓世界一下變大 MMU

1 mmu的作用 1.1 將虛擬位址轉化為實體地址 虛擬位址 va 是軟體程式能表達的非物理的實體地址,實體地址 pa 是儲存單元對應的實際位址。在沒有啟動mmu之前,訪問的位址都是實體地址,我們訪問0位址,就要寫 int 0x00,啟動mmu之後就可以將虛擬位址0x50000000對映到實體地址0...

體驗了一下Ubuntu

ubuntu是目前比較火熱的乙個linux發行版本,今天體驗了一下,感覺還不錯。一直通過red hat linux 9.0學習linux,但它確實有點古老了,但又一直沒有空間安裝red hat enterprise linux或者fedora core,突然在網上看到了ubuntu,只有一張光碟,所...

昨天慶祝了一下

從畢業前進公司到現在,好幾個月了,分給了我乙個通訊錄系統,到昨天才初步成型了,公司上下所有人 除了老闆 都來參加了我的演示會。心情緊張算不上,更不會激動,雖然是個通訊錄可是也不小,這個都是老闆想到的,我是吃驚他能想到這麼多東西去記錄乙個人的資訊。演示的時候覺得還是有點粗糙,我想這個星期過了應該差不多...