1 Arm的异常向量表
1.1 一些术语
- 异常等级(Exception Levels):ARMv9保留了ARMv8中的四个异常等级(EL0至EL3),每个等级提供不同级别的特权和对系统资源的访问权限。其中,EL0通常是用户模式,EL1是操作系统内核模式,EL2用于虚拟化技术中的宿主机操作系统,而EL3是最高等级,通常用于安全相关的功能 。
- 执行状态(Execution States):ARMv9支持两种执行状态,AArch64和AArch32。处理器可以在异常等级之间切换时改变执行状态,但只能从AArch32切换到AArch64,反之则不行。这意味着64位层可以承载32位层,但32位层不能承载64位层 。
- 安全状态(Security States):ARMv9支持两种安全状态,安全状态(Secure State)和非安全状态(Non-secure State)。在安全状态下,处理器可以执行受信任的代码,并访问所有物理地址空间,包括安全和非安全的。而非安全状态下的处理器只能访问非安全物理地址空间和资源 。
- 异常处理:当异常发生时,处理器会保存当前状态,包括程序计数器(PC)和程序状态寄存器(PSTATE),然后跳转到对应的异常处理程序。异常处理程序在处理完毕后,会通过特定的指令(如ERET)返回到异常发生前的状态 。
- 异常向量表:ARMv9使用异常向量表来确定异常处理程序的入口地址。每个异常等级都有自己的向量表,包含要执行的指令。当异常发生时,处理器会从这个表中获取跳转地址 。
- 异常类型:ARMv9体系结构中的异常可以分为同步异常和异步异常。同步异常是由当前执行的指令引起的,而异步异常则是由外部事件触发的 。
- 特权:ARMv9体系结构中的特权级别决定了软件能够访问哪些处理器资源。特权与异常等级紧密相关,高异常等级具有更高的特权 。
- 异常等级切换:在ARMv9中,异常等级的切换只能在发生异常或从异常返回时进行。当发生异常时,异常等级可以增加或保持不变;而从异常返回时,异常等级可以降低或保持不变 。<