用arm v8运行32位和64位OS

时间:2014-09-04 14:27:26

标签: arm 32bit-64bit hypervisor

我正在阅读ARM有关ARM v8的文档,我发现在发生异常时,可以找到允许从32位切换到64位(以及相反的方式)的确切机制。首先,如果有人能向我解释,那就太好了。

另外,我想知道一个虚拟机管理程序(在EL2中)是否可以运行不同类型的操作系统,在EL1中同时具有32位和64位?

最佳,

V

1 个答案:

答案 0 :(得分:3)

restrictions on execution state是更改只能在异常级别的更改处发生,并且异常级别不能使用比上面的更大的寄存器。因此,在EL2上使用AArch64的64位虚拟机管理程序可以支持EL1上的64位和32位guest虚拟机,就像EL1上的64位操作系统支持EL0上的64位和32位进程一样。如果你想看一些真正的代码,arm64 port of KVM就是这样一个虚拟机管理程序。另一方面,在EL2使用AArch32的管理程序可能只能托管32位客户。

异常级别更改的要求意味着您可以通过对自己的级别进行异常来回任意切换 - 您必须得到上述级别的支持才能为您执行此操作。

硬件确定最高实现异常级别(即复位状态)的执行状态,然后每个EL的寄存器宽度位控制下面的一个 - 如果实现EL3,则SCR_EL3.RW控制EL2的状态(或EL1在没有EL2的情况下);如果实现了EL2,则HCR.RW控制EL1;在EL1,PSTATE.nRW控制EL0。

因此,对于EL0,切换的机制略有不同,因为PSTATE.nRW在SPSR中 - 这使得不同进程的状态切换有效地自动化,作为从EL1返回的正常异常的一部分。在更高的异常级别,管理程序/安全监视器还必须采取额外的步骤来编程相关的配置寄存器,作为在下降之前恢复异常上下文的一部分。