本文声明内容来源于网络进行整合/再创作部分内容由AI辅助生成。在 ARMv8-A 架构中当处理器接收到一个异常时它会自动执行一系列操作其中一个关键环节就是决定接下来要使用哪种执行状态以及进入哪个异常级别。执行状态指的是处理器的指令集模式AArch64 或 AArch32而异常级别EL0-EL3则代表了软件执行的权限层级。核心机制利用 SPSR 保存现场保存状态当异常发生时处理器会自动将当前的执行状态和异常级别保存到保存程序状态寄存器SPSR_Elnn表示异常级别中。恢复现场当执行异常返回指令时处理器会使用 SPSR_Eln 中保存的值恢复到发生异常之前的执行状态和异常级别。各异常级别执行状态的控制逻辑异常处理程序在哪个执行状态下运行是由当前异常级别更高一层的某个控制位决定的。这种设计确保了高权限级别能够控制低权限级别的执行环境。1、最高异常级别通常是 EL3但并非一定是它的初始状态复位时决定系统上电复位时最高异常级别的执行状态通常由硬件引脚配置决定。运行时改变软件可以通过配置 RMR_ELn 寄存器来触发一个软复位从而在运行时更改最高异常级别的执行状态。2、EL3 的执行状态安全监视器执行状态固定EL3 通常运行安全监视器Secure Monitor代码这是一段对稳定性要求极高的可信代码。它的执行状态是设计时就确定并固定的。3、EL2 的执行状态虚拟化由 EL3 控制EL2常用于虚拟化管理的执行状态由位于 EL3 的 SCR_EL3.RW 位控制。这个位决定了其下一个较低级别即 EL2的运行状态。4、EL1 的执行状态操作系统内核由 EL2 控制EL1常用于操作系统内核的执行状态由位于 EL2 的 HCR_EL2.RW 位控制。这个位决定了其下一个较低级别即 EL1 和 EL0的运行状态。5、EL0 的执行状态用户应用程序从不处理异常EL0 用于运行无特权权限的应用程序永远不会直接在 EL0 处理异常。实例分析从 EL0 的应用程序到 EL1 的内核异常处理程序EL0 与 EL1 异常切换为了更直观地理解上述机制分析一个典型的 IRQ 中断场景。1、初始状态一个用户应用程序在 EL0 运行使用 AArch32 执行状态。2、触发异常外部设备产生了一个 IRQ 中断。3、确定处理程序执行状态处理器接收到 IRQ 信号准备从 EL0 跳转至 EL1由于异常将在 EL1 处理处理器需要确定 EL1 使用哪种执行状态。根据规则EL1 的执行状态由它的上一级即 EL2 的 HCR_EL2.RW 位决定。假设该位被配置为 1表示 EL1 应运行在 AArch64 状态。4、确定处理程序异常级别系统设计决定了这个 IRQ 应该被 EL1 处理而不是留在 EL0。5、执行切换处理器将当前状态AArch32 EL0的PSTATE信息信息保存到 SPSR_EL1 中。处理器检测到 HCR_EL2.RW 位被置1切换到 AArch64 执行状态并进入 EL1。开始执行 EL1 的 IRQ 处理程序AArch64 代码。总结异常与异常级别的关系级别提升原则异常触发后异常级别保持不变或升高取决于配置但绝不会更低。EL0 的不可达性无论当前处于何种状态异常永远不会被在 EL0 进行处理。EL0 始终是异常发生的源头而非处理的终点。通过这种分层控制机制SCR_EL3 控制 EL2HCR_EL2 控制 EL1/0ARM 架构实现了灵活且安全的混合执行环境。即使底层的应用程序运行在 32 位模式下高权限的异常处理程序如安全监视器、虚拟机监控器、操作系统内核依然可以运行在 64 位模式下从而实现了灵活的混合位宽系统设计。
ARMv8异常级别与执行状态的转换机制(ARMv8异常机制——异常处理中,执行状态与异常级别的转换机制)
本文声明内容来源于网络进行整合/再创作部分内容由AI辅助生成。在 ARMv8-A 架构中当处理器接收到一个异常时它会自动执行一系列操作其中一个关键环节就是决定接下来要使用哪种执行状态以及进入哪个异常级别。执行状态指的是处理器的指令集模式AArch64 或 AArch32而异常级别EL0-EL3则代表了软件执行的权限层级。核心机制利用 SPSR 保存现场保存状态当异常发生时处理器会自动将当前的执行状态和异常级别保存到保存程序状态寄存器SPSR_Elnn表示异常级别中。恢复现场当执行异常返回指令时处理器会使用 SPSR_Eln 中保存的值恢复到发生异常之前的执行状态和异常级别。各异常级别执行状态的控制逻辑异常处理程序在哪个执行状态下运行是由当前异常级别更高一层的某个控制位决定的。这种设计确保了高权限级别能够控制低权限级别的执行环境。1、最高异常级别通常是 EL3但并非一定是它的初始状态复位时决定系统上电复位时最高异常级别的执行状态通常由硬件引脚配置决定。运行时改变软件可以通过配置 RMR_ELn 寄存器来触发一个软复位从而在运行时更改最高异常级别的执行状态。2、EL3 的执行状态安全监视器执行状态固定EL3 通常运行安全监视器Secure Monitor代码这是一段对稳定性要求极高的可信代码。它的执行状态是设计时就确定并固定的。3、EL2 的执行状态虚拟化由 EL3 控制EL2常用于虚拟化管理的执行状态由位于 EL3 的 SCR_EL3.RW 位控制。这个位决定了其下一个较低级别即 EL2的运行状态。4、EL1 的执行状态操作系统内核由 EL2 控制EL1常用于操作系统内核的执行状态由位于 EL2 的 HCR_EL2.RW 位控制。这个位决定了其下一个较低级别即 EL1 和 EL0的运行状态。5、EL0 的执行状态用户应用程序从不处理异常EL0 用于运行无特权权限的应用程序永远不会直接在 EL0 处理异常。实例分析从 EL0 的应用程序到 EL1 的内核异常处理程序EL0 与 EL1 异常切换为了更直观地理解上述机制分析一个典型的 IRQ 中断场景。1、初始状态一个用户应用程序在 EL0 运行使用 AArch32 执行状态。2、触发异常外部设备产生了一个 IRQ 中断。3、确定处理程序执行状态处理器接收到 IRQ 信号准备从 EL0 跳转至 EL1由于异常将在 EL1 处理处理器需要确定 EL1 使用哪种执行状态。根据规则EL1 的执行状态由它的上一级即 EL2 的 HCR_EL2.RW 位决定。假设该位被配置为 1表示 EL1 应运行在 AArch64 状态。4、确定处理程序异常级别系统设计决定了这个 IRQ 应该被 EL1 处理而不是留在 EL0。5、执行切换处理器将当前状态AArch32 EL0的PSTATE信息信息保存到 SPSR_EL1 中。处理器检测到 HCR_EL2.RW 位被置1切换到 AArch64 执行状态并进入 EL1。开始执行 EL1 的 IRQ 处理程序AArch64 代码。总结异常与异常级别的关系级别提升原则异常触发后异常级别保持不变或升高取决于配置但绝不会更低。EL0 的不可达性无论当前处于何种状态异常永远不会被在 EL0 进行处理。EL0 始终是异常发生的源头而非处理的终点。通过这种分层控制机制SCR_EL3 控制 EL2HCR_EL2 控制 EL1/0ARM 架构实现了灵活且安全的混合执行环境。即使底层的应用程序运行在 32 位模式下高权限的异常处理程序如安全监视器、虚拟机监控器、操作系统内核依然可以运行在 64 位模式下从而实现了灵活的混合位宽系统设计。