一、ARM中对于存储管理的协处理器CP15
CP15可以包含16个32bit的寄存器,分别标记为0~15。但是对于同一个寄存器的物理寄存器可能会对应多个。
实际上对于CP15的访问的指令相当简单,只有MCR于MRC。并且这两个指令的格式是相同的。
MCR/MRC {<cond>} p15, 0 ,<Rd>,<CRn>,<CRm>{ ,<opcode_2>}
其中Rd 为ARM的寄存器,CRn和CRm为协处理寄存器。CRn为主,而CRm与opcode_2为辅助寄存器,主要区分同一编号的不同寄存器。如果不需要的情况下CRm为C0,而opcode_2为0;
其中c1寄存器的bit0为禁止或者使能MMU。
如使能MMU:
MRC P15,0,R0,C1,C0,0
ORR R0,#01
MCR P15,0,R0,C1,C0,0
二、MMU的地址变换
ARM中TTB(Translation Table Base)中存储了段描述符的物理地址,它必须与16KB对齐,所以低14bit都是零。如下图所示
它将4GB的空间划分为4096X32bit的区域虚拟寻址。这种寻址方式又分为两个步骤进行,分别为一级页表查询和二级页表查询。
下图为整个寻址方式的总框图:
从图中我们可以清楚的看到页表的查询分为直接的section base查询和基于二级页表的查询。下面将对这两种查询方式分别讨论和讲解。