Exception levels
ARMv8-A系列定义了一系列的异常等级,从EL0到EL3,下面具体说明其含义:
ELn中,随着n的增加,软件的执行权限也相应的增加;
- EL0被称为无特权执行;
- EL2提供了对虚拟化的支持
- EL3提供了安全状态切换功能(安全状态与非安装状态之间的切换)
异常级别的切换
在AARCH64状态下,异常级别的切换只能发生在触发了异常,或者异常处理返回过程中,其中:
- 当发生异常时,异常级别要不增加,要不保持不变;
- 当从异常处理返回时,异常级别只能减小或者保持不变。
在发生异常即将进入或者从异常处理返回到另一个异常级别(包括异常级别不变的情况)时,待进入/返回的异常级别称之为目标异常级别。每个异常级别都有一个明确的目标异常级别,这个目标异常级别要么是默认定义的,要么是通过系统寄存器的相应bit定义的(注意没有异常级别的目标异常级别是EL0)。
不同异常级别资源使用
当PE在某个异常级别执行的时候,PE能够访问下面的资源:
- 可用于当前异常级别和当前安全状态的资源集;
- 在当前的安全状态下,所有较低的异常级别上可用的资源。
这意味着,如果实现了EL3,那么当执行在EL3时,PE可以访问所有异常级别上可用的所有资源(包括安全状态和非安全状态下)。
常见的异常级别模型
ELn | 应用范围 |
---|---|
EL0 | 应用 |
EL1 | 操作系统或者一些特权函数 |
EL2 | Hypervisor |
EL3 | Secure Monitor |
Security state
Armv8-A架构提供了两种安全状态,每种状态都有一个相关的物理内存地址空间,如下所示:
Secure state:在这种状态下,PE可以访问安全状态和非安全状态下的物理地址空间;
Non-secure state:只能访问非安全物理地址空间。