【问题标题】:Running 32 bits and 64 bits OS with arm v8使用 armv8 运行 32 位和 64 位操作系统
【发布时间】:2014-09-04 14:27:25
【问题描述】:

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

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

最好的,

V

【问题讨论】:

    标签: arm 32bit-64bit hypervisor


    【解决方案1】:

    restrictions on execution state 是只有在更改异常级别时才会发生更改,并且异常级别不能使用比它上面的寄存器更宽的寄存器。因此,在 EL2 上使用 AArch64 的 64 位管理程序可以在 EL1 上同时支持 64 位和 32 位来宾,就像在 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 正常异常返回的一部分有效地自动切换不同进程的状态。在较高的异常级别下,管理程序/安全监视器还必须采取额外的步骤,对相关配置寄存器进行编程,作为在下拉之前恢复异常上下文的一部分。

    【讨论】:

    • 太棒了!你填补了我在阅读中留下的漏洞。非常感谢。
    猜你喜欢
    • 2012-07-26
    • 2012-09-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多