MMU(存储器管理单元)在ARM7、ARM9、ARM10、ARM11、Xscale、Cortex-A系列都有,它能把系统中不同类型的存储器(Flash,SRAM,SDRAM,U盘等)进行统一管理,通过地址映射,是需要运行在连续地址空间的软件运行在不连续的物理存储器中,使需要较大运行内存的软件运行在容量较小的物理存储器中,这就是所谓的虚拟存储技术。
(1)虚拟地址到物理地址的映射
使能MMU后,ARM产生的地址为虚拟地址。虚拟地址将空间分为若干大小固定的块,称为页,物理地址空间也划分为同样大小的页。由虚拟地址到物理地址的转换由查表完成,协处理器CP15的C2寄存器保存页表的首地址。通常将页表中常用的一小部分copy到一张”快表“中,称之为TLB(Translation Lookaside Buffers),快表的作用就相当于Cache。
(2)存储器访问控制权限
存储器的访问权限可以以页为单位进行设置,当访问了一个不具有访问权限的页时,会产生异常。当然,访问权限也受权限的影响。
当要访问存储器时,MMU会先查TLB,若TLB中没有转换信息,才会到主存储器中查页表,找到转换信息和访问权限后,把这些信息放入TLB已备下次使用。对于有Cache的系统,这个转换得到的地址内的信息被Cache收录,以后都只访问高速缓存,不访问存储器。
(3)MPU
是ARM公司提供的简单代替MMU的方法来管理存储器,没有MMU就不需要复杂的地址转换操作。MPU允许处理器将4GB的地址空间定义成8对域(意思也可以少于8对),分别控制8个指令和8和数据内存区,每个域的首地址和长度可编程。MPU中记录的就是对应的存储区域的一些属性值,这些属性值包括起始地址、长度、读写权限及缓存等。如果出现没有读写权限的程序对一片内存进行操作,则会进入异常。