linux內存管理 (二) [硬件1] MMU的操作手冊

引言

爲什麼linux會發展成這個樣子,這當然是程序員對程序的要求決定的,
爲了滿足這些要求,提出了 進程地址空間抽象(1) , 其中 硬件上增加了新的模塊MMU(2), 軟件上根據MMU的使用手冊(3)更新了系統
另外在 進程地址空間抽象 的基礎上, 軟件上更新了很多新的內存特性(4).


這裏主要講 MMU的使用手冊(3)

回顧

MMU 是做什麼的 ? 翻譯
翻譯過程中用到了哪些硬件
cpu mmu mmu中的TLBs mmu中的TableWalkUnit cache 主存中的轉換表(頁表) 主存中其他部分
那在訪問內存前,那我們就需要講這些硬件進行預先設置
MCR{<cond>} <coproc>, <opcode_1>, <Rd>, <CRn>, <CRm>{, <opcode_2>}
// cp15 的 mcr 和 mrc
MCR{<cond>} p15, 0, <Rd>, <CRn>, <CRm>{, <opcode2>} (L = 0)
MRC{<cond>} p15, 0, <Rd>, <CRn>, <CRm>{, <opcode2>} (L = 1)

一般情況下,對於cp15 
// Rd是cpu寄存器,目標寄存器 ,Cn是cp15寄存器,是源寄存器
// 意思是將cp15 的 Cn寄存器讀到 cpu的 Rd寄存器裏面來
mrc p15 ,0 ,Rd ,Cn ,C0 ,0
或
mrc p15 ,0 ,Rd ,Cn ,C0


  • CP15中的MMU相關寄存器
	MMU/CACHE總控制
		Register 1: Control register //enable/disable
		Register 13: Process ID
  • MMU OPS
	啓用和禁用MMU
		通過寫入系統控制協處理器寄存器1的M位(位[0]),可以啓用和禁用MMU。
		復位時,該位清除爲0,禁用MMU。

	啓動MMU前需要做的事情
		1. 必須對所有相關的CP15寄存器進行編程。
			1.1 設置cp15 的 register 2
		2. 在內存中設置合適的翻譯表
		3. 應禁用並使指令緩存失效。
		4. 可以在啓用MMU的同時重新啓用指令緩存。 // 也可以不做
		5. 需要刷新當時啓用的任何虛擬標記緩存
		7. 確保啓用MMU的代碼具有相同的虛擬和物理地址。 // 禁用也是這樣子的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章