• 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.转化的步骤例如以下:


  • 相关阅读:
    面试题-JAVA算法题
    分布式
    linux中文件描述符fd和struct file结构体的释放
    Linux字符设备驱动
    Linux内存地址管理概述
    mnist卷积网络实现
    【TensorFlow官方文档】MNIST机器学习入门
    FCN笔记
    datetime.timedelta
    tensorflow中的函数获取Tensor维度的两种方法:
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7376051.html
Copyright © 2020-2023  润新知