上一期中我们介绍了ARMv8-A架构里操作系统常用的寄存器的基本使用情况,这一期中我们将介绍ARMv8-A架构中的执行状态。
一、ARMv8-A的执行模式
ARMv8-A有两种执行模式,一种是AArch64执行模式,另一种是AArch32执行模式。执行状态定义处理单元(Processing Element, PE)的执行环境,包括以下内容:
-
支持的寄存器宽度
-
支持的指令集
-
异常模型
-
虚拟存储系统(Virtual Memory System Architecture, VMSA)架构
-
程序员模型
AArch64为64位执行状态。对应上述内容,此执行状态:
-
提供31个64位通用寄存器,其中X30用作过程链接寄存器(ProcedureLink Register)。
-
提供64位程序计数器(PC)、堆栈指针(SP)和异常链接寄存器(ELRs)。
-
提供32个128位寄存器以支持SIMD矢量和标量浮点运算。
-
提供单一指令集A64。
-
定义ARMv8异常模型,该模型最多有四个异常级别EL0-EL3,它们提供执行权限层次结构。
-
支持64位虚拟寻址。
-
定义一系列与PSTATE相关的寄存器。A64指令集包括能直接操作各种PSTATE寄存器的指令。
-
使用后缀命名每个系统寄存器,该后缀指示可以访问寄存器的最低异常级别。
AArch32为32位执行状态。对应上述内容,此执行状态:
-
提供13个32位通用寄存器和一个32位PC、一个32位SP寄存器和一个32位链接寄存器(Link Register,LR)。链接寄存器用作异常链接寄存器和过程链接寄存器。其中一些寄存器有多个备份寄存器,用于不同的处理器工作模式。我们在上一期提到过,同一个功能的寄存器在不同的处理器运行模式下可能对应不同的物理寄存器,这些寄存器被称为备份寄存器。
-
为从Hyp(hypervisor)模式返回的异常提供一个异常链接寄存器。
-
提供32个64位寄存器,用于对高级SIMD矢量和标量浮点计算的支持。
-
提供两个指令集,A32和T32。
-
支持基于处理器工作模式的ARMv7-A异常模型,并将其映射到基于异常级别的ARMv8异常模型。
-
使用32位虚拟地址。
-
使用单个当前程序状态寄存器(CPSR)保存处理器状态。
-
在AArch64和AArch32执行状态之间进行转换称为内部处理(interprocessing)。
二、结语
本期我们介绍了ARMv8-A的执行状态。下一期我们将介绍ARMv8-A的异常级别和安全状态。
参考文献
[1] ARM® Architecture Reference ManualARMv8, for ARMv8-A architecture profile