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转换过程。

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

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

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

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

 

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

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

 

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

        安全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维护。

 

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