ARMv8-A编程指导之MMU(3)

2 内核和应用虚拟地址空间的分开

        操作系统通常有多个应用或任务异步运行。每个应用都有自己唯一的转换表且内核从一个转换表切换到另一个,这作为两个任务进行上下文切换的一部分。但是,大多数内存系统仅被内核使用且有固定的虚拟到物理地址的映射,转换表项很少修改。ARMv8架构提供了一些特性来有效处理这个要求。

        转换表基地址有TTBR0_EL1和TTBR1_EL1指定。当VA的高位全为0时,选择TTBR0指向的转换表,当VA的高位为1时,选择TTBR1选择的转换表。你可以使能VA tagging不用对高8位做检查。

        处理器的指令获取或数据访问的虚拟地址为64位。但是你必须在48位物理地址内存映射中映射两个定义的区域。

        EL2和EL3只有TTBR0,没有TTBR1,这意味着:

(1)如果EL2使用AArch64,它仅使用范围0x0~0x0000ffffffffffff的VA;

(2)如果EL3使用AArch64,它仅使用范围0x0~0x0000ffffffffffff的VA;

        下图显示了内核空间被映射到内存的最高区域并且虚拟地址空间被映射到内存的最低区域。但是,两者都被映射到一个更小的物理地址空间。

ARMv8-A编程指导之MMU(3)_第1张图片

        转换控制寄存器TCR_EL1定义了需要检查的最高位的数目。TCR_EL1包含T0SZ[5:0]和T1SZ[5:0]。这个域的数字给出了全0或全1的最高位的数目。这里指定了这些域的最小值和最大值,根据granule大小和起始表级别不同。因此,你必须一直使用两个空间,在所有系统中至少要求两个转换表。简单的裸系统没有OS仍要求包含fault项的表。

ARMv8-A编程指导之MMU(3)_第2张图片

         TCR_EL1控制着EL1和EL0的其他内存管理特性。上图仅显示了控制地址范围和graunule大小的域。

ARMv8-A编程指导之MMU(3)_第3张图片

        IPS域控制着最大输出地址大小。如果转换指定的输出地址超出了范围,访问出现错误,000=32位物理地址,101=48位。两bit TG1和TG0域给出了内核或用户空间的粒度,00=4KB,01=16KB,11=64KB。

        你可以配置用于第一次查找的转换表级别。完整的转换过程要求三级或四级页表。你不需要实现所有级别。查找的第一级别由粒度大小和TCR_ELn.TxSZ域决定。你可以分开配置TTBR0_EL1和TTBR1_EL1。

你可能感兴趣的:(ARMv8-A编程指导手册,TTBR)