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;

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

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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值