文章目录前言一、 ARM中用于存储管理的控制协处理器CP151、 访问CP15寄存器的指令2、 CP15的寄存器二、 存储器管理单元MMU1、 MMU的由来2、 禁止/使能MMU3、 MMU中地址变换过程前言本文是学习《ARM体系结构与编程》杜春雷 著的读书笔记。该书以 ARM v6 之前的体系架构为基础内容相对较早但对初学者仍有不少可借鉴之处。文中结合了书中的讲解与网络资料整理成笔记希望能与大家共同进步。一、 ARM中用于存储管理的控制协处理器CP151、 访问CP15寄存器的指令指令与语法格式指令说明语法格式MCR将ARM寄存器中的数据传送到协处理器寄存器中MCR{cond} p15, opcode_1, Rd, CRn, CRm, {opcode_2}MRC将协处理器寄存器中的数据传送到ARM寄存器中MRC{cond} p15, opcode_1, Rd, CRn, CRm, {opcode_2}注这两条指令只能在系统模式下使用否则会触发未定义指令异常。在用户模式下可以由操作系统定义一些 SWI 调用通过 SWI 调用间接完成相应功能。指令编码格式及说明31~2827~2423~212019~1615~1211~87~543~0cond11100 0 0 (opcode_1)0(MCR) 1(MRC)CRnRdcp_numopcode_21CRm说明cond指令执行的条件码。忽略条件码时指令无条件执行。opcode_1协处理器行为操作码。对于 CP15 来说opcode_1 永远为 0b000否则结果未知。Rd不能是 R15/PC否则结果未知。CRn作为目标寄存器的协处理器寄存器编号为 C0~C15。CRm附加的目标寄存器或源操作数寄存器。如果不需要设置附加信息应将 CRm 设置为 C0否则结果未知。opcode_2提供附加信息例如寄存器的版本号或访问类型用于区分同一编号下的不同物理寄存器。可以省略 opcode_2或将其设置为 0否则结果未知。2、 CP15的寄存器CP15可以有16个32位的寄存器寄存器编号基本作用在MMU中的作用在PU中的作用0ID编码只读ID编码和cache类型1控制位可读写各种控制位2存储保护和控制地址转换表基地址Cachability的控制位3存储保护和控制域访问控制位Bufferablity控制位4存储保护和控制保留保留5存储保护和控制内存失效状态访问权限控制位6存储保护和控制内存失效地址保护区域控制7高速缓存和写缓存高速缓存和写缓存控制8存储保护和控制TLB控制保留9高速缓存和写缓存高速缓存锁定10存储保护和控制TLB锁定保留11保留12保留13进程标识符进程标识符14保留15因不同设计而异因不同设计而异因不同设计而异注高亮的标识的寄存器为与MMU操作相关的。寄存器C0当操作码opcode_2 0C0为存放ARM处理器信息ARM7之后的处理器其主标识符的编码格式31~2423~2019~1615~43~0厂商决定产品子编号ARM体系版本号产品主编号处理器版本号当opcode_2 1C0存放Cache属性信息31~2928~252423~1211~0000属性指令和数据Cache是否分开数据Cache相关属性指令Cache相关属性[23 : 12]用于定义数据cache的属性[11 : 0]用于定义指令cache的属性11~98~65~321~0000容量Cache相联特性M块大小控制寄存器C1功能主要包括禁止/使能MMU以及其他的与存储系统相关的功能配置存储系统以及ARM处理器中的相关部分的工作方式。指令格式如下所示MRC p15,0, R0, C1, C0{,0}将CP15的寄存器C1的值读到R0中 MCR p15,0, R0, C1, C0{,0}将R0的值写到CP15的寄存器C1中寄存器C1的编码格式及含义31~161514131211109876543210SBZP/UNPL4RRVIZFRSBLDPWCAM控制位含义M0禁止MMU或者PU1使能MMU或者PUA0禁止地址对齐检查1使能地址对齐检查C0禁止数据/整个cache1使能数据/整个cacheW0禁止写缓冲1使能写缓冲P0异常中断处理程序进入32位地址模式1异常中断处理程序进入26位地址模式D0禁止26位地址异常检查1使能26位地址异常检查L0选择早期中止模型1选择后期中止模型B0little endian1big endianS在基于MMU的存储系统中本位用作系统保护R在基于MMU的存储系统中本位用作ROM保护F0由生产商定义Z0禁止跳转预测功能1使能跳转预测指令I0禁止指令cache1使能指令cacheV0选择低端异常中断向量0x00x1c1选择高端异常中断向量0xffff00000xffff001cRR0常规的cache淘汰算法如随机淘汰1预测性淘汰算法如round-robin淘汰算法L40保持ARMv5以上版本的正常功能1将ARMv5以上版本与以前版本处理器兼容不根据跳转地址的bit[0]进行ARM指令和Thumb状态切换bit[0]等于0表示ARM指令等于1表示Thumb指令[31:16]保留应为SBZP/UNP二、 存储器管理单元MMU在ARM系统中MMU主要完成以下工作虚拟存储空间到物理存储空间的映射。存储器访问权限的控制。设置虚拟存储空间的缓冲的特性。MMU 的实现需要引入页表translate table机制。页表存储在内存中表中的每一行对应虚拟存储空间的一个页这样的一行称为地址变换条目。系统通常提供一个寄存器来保存页表的基地址在 ARM 中由系统控制协处理器 CP15 的C2 寄存器保存页表基地址。从虚拟地址到物理地址的变换过程本质上就是查询页表的过程。为了解决内存访问速度的问题MMU 采用了类似 cache 的方式引入快表 TLBtranslation lookaside buffer机制用一小块快速的存储空间通常为 8~16 个字来存放当前需要访问的地址变换条目。-C8寄存器用来控制清除TLB内容的相关操作当内存中页表内容改变或者通过修改CP15的C2寄存器使用新的叶表时TLB中的内容需要全部清除。C10寄存器控制TLB内容的锁定MMU可以将某些地址变换条目锁定locked down在TLB中从而使得进行与该地址变换条目相关的地址变换速度保持很快。C3寄存器控制与域相关的属性的配置MMU可以将整个存储空间分为最多16个域domain。C5和C6寄存器分别处理内存失效时的状态指示和失效的地址。注我们在程序中使用的变量和函数都有各自的地址在程序被编译后这些地址就成了指令中的地址指令中的地址就成了CPU执行单元发出的内存地址所以在启用MMU的情况下 程序中使用的地址均是虚拟内存地址都会引发MMU进行查表和地址转换操作。内存保护机制处理器一般有用户模式User Mode和特权模式privileged Mode之分。操作系统可以在页表中设置每个页表访问权限有些页表不可以访问有些页表只能在特权模式下访问有些页表在用户模式和特权模式下都可以访问同时访问权限又分为可读、可写和可执行三种。这样设定之后当CPU要访问一个VAVirtual Address时MMU会检查CPU当前处于用户模式还是特权模式访问内存的目的是读数据、写数据还是取指令执行如果与操作系统设定的权限相符则允许访问把VA转换成PA否则不允许执行产生异常Exception。段错误是这样产生的用户程序要访问的一个VA经MMU检查无权访问。MMU产生一个异常CPU从用户模式切换到特权模式跳转到内核代码中执行异常服务程序。内核把这个异常解释为段错误把引发异常的进程终止掉。1、 MMU的由来以相对有限的内存空间运行远大于空间的程序代码在许多年以前人们还在使用 DOS 或一些古老的操作系统那时内存很小应用程序也很小把程序全部装入内存基本就能满足需要。随着科技的发展图形界面以及其他更复杂的应用不断出现内存已经无法容纳这些应用程序了。通常的解决办法是把程序分割成多个覆盖块覆盖块 0 最先运行运行结束后再调用另一个覆盖块。虽然这些操作由操作系统完成但需要程序员自己分割程序效率非常低。于是人们提出了虚拟存储器virtual memory的方法。虚拟存储器的基本思想是程序、数据和堆栈的总大小可以超过内存空间的大小操作系统只把当前正在运行的部分保存在内存中未使用的部分保存在磁盘上。例如一个 16MB 的程序运行在只有 4MB 内存的机器上操作系统可以决定哪 4MB 内容留在内存中并在需要时在内存与磁盘之间交换程序代码这样16MB 的代码就可以运行在 4MB 的机器中了。注意这里已经包含了虚拟地址和物理地址的概念。2、 禁止/使能MMUCP15的寄存器C1的位[0]控制禁止/使能MMU。0禁止1使能。禁止/使能MMU时应注意的问题使能MMU之前要在内存中建立好页表同时CP15中的各相关寄存器必须完成初始化。如果使用的不是平板存储模式在禁止/使能MMU时虚拟地址和物理地址的对应关系会发生改变这时应该清除cache中的当前地址变换条目。如果完成禁止/使能MMU的代码的物理地址和虚拟地址不相同则禁止/使能MMU时将造成很大麻烦因此完成禁止/使能MMU的代码的物理地址和虚拟地址最好相同。3、 MMU中地址变换过程ARM支持的存储块大小段大小为1M的存储块大页大小为64KB的存储块小页大小为4KB的存储块极小页大小为1KB的存储块在MMU中采用下面两级页表实现一级页表中包含有以段为单位的地址变换条目以及指向二级页表的指针。一级页表实现的地址映射粒度较大。二级页表中包含以大页和小页为单位的地址变换条目。其中一种类型的二级页表好包含有以极小页为单位的地址变换条目通常以段为单位的地址变换过程只需要一级页表。而以页为单位的地址变换过程还需要二级页表。基于段的地址变换过程大页地址变换过程粗粒度小页地址变换过程粗粒度极小页地址变换过程细粒度选择页表大小的优点较小的页没有外碎片内部碎片少且每个页碎片不超过页的大小空间利用率高。较大的页或段页表规模小页表占用内存较小。单个页面覆盖范围较大TLB命中率高。
阅读完成 · 觉得有帮助?