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