ARMv8-A架构基础之 异常级别(exception level, el)
ARM架构定义了基于处理器模式的异常模型。 对于每种异常类型,体系结构都定义了异常所采用的模式。 这种模式被称为异常的目标模式(target mode)。 然而可配置的陷入,使能和路由控制常常可以更改异常的目标模式。 ARMv8-A 的AArch32遵循此模型。
当处理器发生异常时:
- 将当前程序状态保存在目标模式的SPSR中。
- 保存异常的返回地址:
- 如果目标模式不是Hyp模式,则在目标模式的链接寄存器(LR)中。
- 如果目标模式是Hyp模式,则在ELR_hyp中。
- 进入目标模式。 除非异常目标模式是Monitor模式,否则不会更改安全状态。
ARMv7-A体系结构使用从PL0到PL2的特权级别。 在ARMv8-A中,异常级别已经取代了权限级别,但本节将介绍如何对PL1继续进行特殊使用。 下表显示了包含虚拟化扩展和安全扩展的ARMv7-A处理器的全套处理器模式。 它还显示了ARMv7-A分配给每个模式的特权级别,这些模式定义了其执行权限。 执行权限是在每个安全状态中独立定义的。
模式 | 功能 | 安全状态 | ARMv7-A特权级别 |
User (USR) | 非特权模式(大多数应用程序都运行在该模式) | Both | PL0 |
FIQ | FIQ中断异常时进入 | Both | PL1 |
IRQ | IRQ中断异常时进入 | Both | PL1 |
Supervisor (SVC) | 重置时进入或执行监督调用指令(SVC)时进入 | Both | PL1 |
Monitor (MON) | 当执行SMC指令(安全监视器调用)时或处理器进入Monitor 模式异常用于支持安全状态和非安全状态之间的切换。 | Secure only | PL1 |
Abort (ABT) | 内存访问异常时进入 | Both | PL1 |
Undef (UND) | 在执行未定义的指令时进入 | Both | PL1 |
System (SYS) | 特权模式,与用户模式共享寄存器视图 | Both | PL1 |
Hyp (HYP) | 由Hypervisor调用和Hyp陷入异常时进入 | Non-secure only | PL2 |
在ARMv7-A体系结构中,处理器模式可以在特权软件控制下更改,或者在发生异常时自动更改。 当发生异常时,内核保存当前执行状态和返回地址,进入处理异常所需的模式,并可能禁用硬件中断。 在以前没有特权的用户模式,应用程序以最低级别的特权PL0运行。
操作系统在PL1上运行。 在具有虚拟化扩展的系统中,Hypervisor在PL2上运行。 安全监视器作为在安全世界和普通世界之间切换的网关,也在PL1上运行。
ARMv8-A不更改此异常模型,但添加了以下规则以涵盖ARMv7-A中不可能出现的情况:
- 如果EL2正在使用AArch64,则任何以Hyp模式为目标的异常进入EL2也将使用AArch64。
- 如果EL3正在使用AArch64,则任何以Monitor模式为目标的异常进入EL3也将使用AArch64。
在AArch64中,处理器模式被映射到的异常级别如下图所示(linux 就是rich os)。
比较典型映射如下:
当发生异常时,处理器把异常级别切换到能处理该异常类型的异常级别(相当于ARMv7-A中的处理器模式)。 在AArch32中安全监视器(Secure monitor)在PL1上运行,而在AArch64中安全监视器在EL3上运行。
处理器模式映射到异常级别
安全状态下的异常级别取决于EL3是否使用AArch64。 这会影响处理器模式如何映射到异常级别。
ARMv7-A中使用的monitor模式在ARMv8-A中不存在。这是因为正在使用AArch64的EL3提供了Secure monitor功能。
在普通世界中映射没有变化,但是在安全世界中,Supervisor 模式,Abort 模式,IRQ模式,FIQ模式,Undefined 模式和System 模式从EL1升级到EL3。 这是因为:
- EL3提供Secure Monitor功能。
- ARMv6安全扩展将Monitor 模式定义为与下面这些模式为同一层级的安全状态模式:Supervisor 模式,Abort 模式,IRQ模式,FIQ模式,Undefined 模式和System 模式。 因此,这些模式和Secure Monitor功能一起表示为EL3。
这个重映射对处理器的操作没有影响。 在AArch32状态内的操作完全根据处理器模式之间的交互来定义,而不涉及任何关联的权限级别或异常级别。
ARMv8-A中的权限级别
当EL3使用AArch32时,这些模式集(Supervisor,Abort,IRQ,FIQ,Undefined,System)是处于安全状态的EL3模式,在所有其他情况下都是EL1模式。
为了避免这种复杂的描述,这些模式可以被描述为PL1模式,反映它们在ARMv7-A中的特权级别。 与此相关的是:
- 在这两种安全状态下,这些模式下影响执行的控制可以被描述为PL1控制。
- 在这些模式或用户模式下执行时,使用的转换系统称为PL1&0转换机制。
本文地址:https://blog.csdn.net/zxpblog/article/details/107344731
上一篇: Dubbo集群容错源码剖析
下一篇: filebeat(ELK)