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

6 EL2和EL3的转换

        ARMv8-A架构的虚拟化扩展引入了转换的第二stage。当系统中存在hypervisor时,可能存在一个或多个guest操作系统。它们如之前描述的仍使用TTBRn_EL1且MMU操作不会变化。

        hypervisor必须在两stage过程中发出一些额外的转换步骤来共享不同guest操作系统中的物理内存系统。在第一stage中,VA被转化为IPA,这通常由OS控制。第二stage中,由hypervisor控制,发起由IPA到最后PA的转换。

        hypervisor和安全monitor也有它们的代码和数据的stage1转换表,它发起从VA到PA的直接映射。

NOTE:架构手册使用Translation Regime来表示不同的转换表。

        下图总结了两stage转换过程。

        stage2转换,将IPA转换为PA,使用hypervisor控制的额外一组表。这须通过写HCR_EL2明确的使能。这个过程仅应用于non-secure EL1/0访问。

        stage2转换表的基地址由VTTBR0_EL2指定。它指定了在内存下部的一个单独连续地址空间。支持的地址空间大小由VTCR_EL2的TSZ[5:0]域指定。

        寄存器的TG域指定了granule大小,SL0域控制页表查找的第一级。超出指定地址范围的访问会造成转换fault。

 

        hypervisor EL2和安全monitor EL3由各自的level1表,它直接将虚拟地址空间映射到物理地址空间。TTBR0_EL2和TTBR0_EL3指定表基地址,并在内存下部使能了一块连续的地址空间。TG域指定granule大小,SL0域控制了表查找的第一level。任何超出定义的地址范围会造成转换fault。

 

        安全monitor EL3有自己的转换表。该表基地址由TTBR0_EL3指定并通过TCR_EL3配置。转换表有能力访问安全和非安全物理地址。TTBR0_EL3仅用于安全monitor EL3模式,但不被trusted内核使用。当对安全world的转换完成时,trusted内核使用EL1转换,即转换表由TTBR0_EL1和TTBR1_EL1指定。因为这些寄存器在AArch64 not bank,安全monitor代码必须配置安全world的新表且保存TTBR0_EL1和TTBR1_EL1的拷贝。

        与非安全状态的正常操作相比,EL1转换regime在安全状态行为不一样。转换的第二stage被禁用,EL1转换regime可以指向安全和非安全物理地址。在安全world没有虚拟化,因此IPA通常与最后的PA相同。

        TLB中的页表项被标记为安全或非安全,因此当你在安全和正常world进行转换时不需要TLB维护。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值