arm的两个页表基地址寄存器
TTBR0与TTBR1
armv7中,有两个存放页表(一级页表)基地址的寄存器,TTBR0和TTBR1。那mmu进行地址翻译(translation table walk)的时候到底是选择哪一个寄存器的值作为基地址呢?
TTBCR寄存器
那么这个时候就需要用到TTBCR寄存器,这个寄存器的格式如下图
其中最后[2-0]位(值为N)决定了用TTBR0还是TTBR1,看下手册的说明
当N>0时,如果给的虚拟地址[31:32-N]位都是0,那么用TTBR0,一旦这其中的某一位是1了,就用TTBR1。又N的取值只有0到7(只有3位),所以每个N的取值都对应了一个用TTBR0或者TTBR1的分界线。比如当N=2时,如果给的虚拟地址第[31:30]位为0,即不超过0x40000000,那么就用TTBR0,一旦等于或者超过0x40000000那么就用TTBR1.
下面还有一张N值不同时,对应的地址分界线图