使用arm v8运行32位和64位操作系统

使用arm v8运行32位和64位操作系统,arm,32bit-64bit,hypervisor,Arm,32bit 64bit,Hypervisor,我正在阅读ARM关于ARMV8的文档,我很难找到在异常发生时允许从32位切换到64位(反之亦然)的确切机制。首先,如果有人能向我解释,那就太好了 我还想知道一个管理程序(在EL2中)是否可以运行不同类型的操作系统,在EL1中同时有32位和64位 最好的 V原因是,更改只能在异常级别更改时发生,并且异常级别不能使用比其上一级别更宽的寄存器。因此,在EL2使用AArch64的64位虚拟机监控程序可以在EL1支持64位和32位来宾,就像EL1的64位操作系统在EL0支持64位和32位进程一样。如果您喜

我正在阅读ARM关于ARMV8的文档,我很难找到在异常发生时允许从32位切换到64位(反之亦然)的确切机制。首先,如果有人能向我解释,那就太好了

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

最好的

V

原因是,更改只能在异常级别更改时发生,并且异常级别不能使用比其上一级别更宽的寄存器。因此,在EL2使用AArch64的64位虚拟机监控程序可以在EL1支持64位和32位来宾,就像EL1的64位操作系统在EL0支持64位和32位进程一样。如果您喜欢看一些真实的代码,那么,就是这样一个虚拟机监控程序。另一方面,在EL2上使用AArch32的虚拟机监控程序只能承载32位来宾

对异常级别进行更改的要求意味着您不能通过将异常转换到自己的级别来任意来回切换-您必须获得上面级别的支持才能这样做

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


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

太好了!你填补了我在阅读中留下的漏洞。非常感谢你。