一、系统控制协处理器CP15
1、访问CP15寄存器的指令
MCR:ARM寄存器到协处理器寄存器的数据传输指令
MRC:协处理器寄存器到ARM寄存器的数据传是指令
只能在系统模式下使用,在用户模式下,通过SWI调用完成,否则会出发异常中断;
2、CP15中的寄存器
1)CP15中的寄存器C0:寄存器C0中存放的是ARM相关的一些标识符,这个寄存器是只读的;
2)CP15中的寄存器C1:是控制寄存器,主要是:禁止/使能MMU以及其他的与存储系统相关的功能、配置存储系统以及ARM处理器中的相关部分的工作方式;
二、存储器管理单元MMU
1)虚拟存储空间到物理存储空间的映射;
2)存储访问权限的限制;
3)设置虚拟存储空间的缓冲的特性;
页表(translate table)是实现上述功能的重要手段,它是一个位于内存中的表,表中的每一行(地址变换条目entry)对应于虚拟存储空间的一个页,该行包括了该虚拟内存页对应的物理内存页的地址、该页的方位权限和该页的缓冲特性。ARM中页表的基地址保存在系统控制协处理器CP15的寄存器C2;
快表(TLB):容量小(8~16个字)、访问速度和CPU中通用寄存器相当的存储器件,来存当当前访问需要的地址变换条目。
CPU访问内存的过程:TLB中查找 -> 页表 -> 添加到TLB中 ;
更新页表时,需要清除所有TLB的内容,通过C8寄存器来控制清楚TLB内容的相关操作;
MMU可以将某些地址变换条目锁定在TLB中,通过C10来控制;而寄存器C3用来控制与域相关的属性的配置;寄存器C5用于内存访问失效状态指示;寄存器C6用于内存访问失效时失效的地址;
ARM支持存储块的大小有:段(1M)、大页(64K)、小页(4K)、极小页(1K);
MMU中通过两级页表实现地址的映射:
1)一级页表有以段为单位的地址映射条目和指向二级页表的指针,实现的地址映射粒度较大
2)二级页表包含以大页、小页为单位的地址映射条目,其中,有一部分会以极小页为单位;
基于一级页表的地址变换过程:
寄存器C2的[31:14]为内存中页表的基地址(16KB对齐),[13:0]都为0 -> C2的[31:14]和虚拟地址的[31:20]组成32位高30位,[1:0]置为00 -> 通过上述构成的32位索引值从页表中可以查到一个4字节的地址变换条目(一级描述符)
一级描述符:
1)[1:0]是0b00,没有映射,访问该存储空间会产生地址变换失效信号;
2)[1:0]是0b10,段描述符,定义了对应的1MB的虚拟存储空间的地址映射关系;
3)[1:0]是0b01,粗粒度页表描述符,包含了粗粒度的二级页表的物理地址,该粗粒度的二级页表定义了1MB的虚拟存储空间的地址映射关系,可实现大页、小页和极小页为单位的地址映射;
4)[1:0]是0b11, 细粒度页表描述符,包含了细粒度。。。。。。。。。。。,该细粒度.......
基于二级页表(粗粒度和细粒度两种)的地址转换过程:
ARM中基于页的地址映射:
- 大页 大小为64KB的存储块
- 小页 大小为4KB的存储块
- 极小页 大小为1KH的存储块
页表中用于描述一个虚拟存储页(虚页)地址映射关系的条目称为页描述符
四、高速缓冲存储器和写缓冲区
cache的工作原理