linux内存管理 (二) 2.6 硬件 MMU的操作手册

引言

为什么linux会发展成这个样子,这当然是程序员对程序的要求决定的,
为了满足这些要求,提出了 进程地址空间抽象(1) , 其中 硬件上增加了新的模块MMU(2), 软件上根据MMU的使用手册(3)更新了系统
另外在 进程地址空间抽象 的基础上, 软件上更新了很多新的内存特性(4).


这里主要讲 MMU的使用手册(3)

回顾

MMU 是做什么的 ? 翻译
翻译过程中用到了哪些硬件
cpu mmu mmu中的TLBs mmu中的TableWalkUnit cache 主存中的转换表(页表) 主存中其他部分
那在访问内存前,那我们就需要讲这些硬件进行预先设置
  • MMU是通过CP15控制的
    可以从 linux内存管理 (二) [硬件2] CP15系统控制协处理器看到 CP15 的操作方式 及 MMU相关寄存器

  • CP15 操作方式


// mcr 写 cp15寄存器
// mrc 读 cp15寄存器

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的代码具有相同的虚拟和物理地址。 // 禁用也是这样子的

你可能感兴趣的:(Linux内存管理,linux,运维,服务器)