mmu介紹

arm exynos4412平臺mmu配置以及的簡單創建.

1.mmu的全稱是Memory Management Unit(內存管理單元)
2.mmu所在位置.mmu再arm核心.他不是一個外設,他是arm核心的的一部分. 
3.爲什麼要使用mmu,因爲在多任務的操作系統當中,進程A,B,C都可能使一段地
   D,爲了保存他們訪問的不是同一個物理地址,我們給每個進程4G的虛擬地址空間
   然後使用,如何使用mmu來轉化虛擬地址空間和物理地址空間之間的對應關係,
   這個轉換關係被稱爲頁表,再每個進程中都保存了一個進程特有的頁表,
    爲了保證他們的物理地址不會重複,這些虛擬地址會被映射不同的物理地址段.

4.mmu工作原理:用來控制內存的訪問權限.

   CP15 協處理器的c3寄存器
  
   DACR, Domain Access Control Register, VMSA
   DDI0406C_arm_architecture_reference_manual.pdf P1541
   mmu一共有16個域,cp15中的32個位,每兩個位表示一個域,用來控制內存
   訪問權限.

   0b00 No access. Any access to the domain generates a Domain fault.
   //如果cp15設置的是0b00那麼被映射的區域步可訪問.
   0b01 Client. Accesses are checked against the permission bits in the 
   translation tables.
   //需要檢查權限才能訪問.
   0b10 Reserved, effect is UNPREDICTABLE .
   //保留
   0b11 Manager. Accesses are not checked against the permission bits in 
   the translation tables.
   //不需要檢查權限.就可以訪問內存.
   

5.cp15協處理器,的寄存器c2的值用來保存頁表的物理地址.
	ttb DDI0406C_arm_architecture_reference_manual.pdf P1711 
    MRC p15, 0, <Rt>, c2, c0, 1 ; Read 32-bit TTBR1 into Rt
    MCR p15, 0, <Rt>, c2, c0, 1 ; Write Rt to 32-bit TTBR1 

	它用來保存頁表的物理首地址.下面是mcr的語法.
	MCR指令將ARM處理器的寄存器中的數據傳送到協處理器的寄存器中。如果協處理器不能成功地執行該操作,將產生未定義的指令異常中斷。

    指令的語法格式:

    MCR{ <cond>} p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_1>}

	MCR2 p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_2>}

	其中,<cond>爲指令執行的條件碼。當<cond>忽略時指令爲無條件執行。MCR2中,<cond>爲Ob1111,指令爲無條件執行指令。

	<opcode_1>爲協處理器將執行的操作的操作碼。對於CP15協處理器來說, <opcode_1>永遠爲0b000,當<opcode_1>不爲0b000時,該指令操作結果不可預知。

	<Rd>作爲元寄存器的ARM寄存器,其值被傳送到得協處理器寄存器中。

	<Rd>不能爲PC,當其爲PC時,指令操作結果不可預知。

	<CRn>作爲目標寄存器的協處理器寄存器,其編號可能爲C0,C1....C15。 <CRm>附加的目標寄存器或者原操作數寄存器,
	用於區分同一個編號的不同物理寄存器。當指令中不需要提供附加信息時,將C0指定爲<CRm>,否則指令操作結果不可預知。 
	
	<opcode_2>提供附加信息,用於區別同一個編號的不同物理寄存器。當指令中指定附加信息時,省略<opcode_2>或者將其指定爲0,否則指令操作結果不可預知。

	MRC指令將協處理器的寄存器中數值傳送到ARM處理器的寄存器中。如果協處理器不能成功地執行該操作,將產生未定義的指令異常中斷。

	指令的語法格式:

	MRC{<cond>} p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_2>}

	MRC2 p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_2>}


6.還有一個cp15協處理器的c1寄存器,的功能介紹,他是用來關閉和開啓mmu的.
	可以在DDI0388I_cortex_a9_r4p1_trm.pdf中找到.p74頁中的
	System Control Register的
	[0] M bit Banked Enables the MMU: 0MMU disabled. 
	This is the reset value.1 MMU enabled.
	
	MRC p15, 0,<Rd>, c1, c0, 0; Read SCTLR
	MCR p15, 0,<Rd>, c1, c0, 0; Write SCTLR
	
	也就是cp15寄存器中的c1寄存器的第0位要設置爲1,mmu功能才能開啓.
	設置爲0則關閉.

7.下面是講解一下mmu是如何工作的.
	第一步:cpu會找到cp15協處理器
	第二步:cp15協處理器的寄存器c2中保存的當前頁表的物理地址.
	第三步:通過這個地址mmu會找到內存中頁表,
	第四步:mmu通過這個頁表進行相應的關係進行虛擬地址和物理地址的轉化.

8.轉化的過程如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章