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

引言

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


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

回顾
MMU 是做什么的 ? 翻译
翻译过程中用到了哪些硬件
cpu mmu mmu中的TLBs mmu中的TableWalkUnit cache 主存中的转换表(页表) 主存中其他部分
那在访问内存前,那我们就需要讲这些硬件进行预先设置

// 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的代码具有相同的虚拟和物理地址。 // 禁用也是这样子的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值