【方辉专栏】ARM64体系结构编程与实践学习笔记(五) 异常处理

蓝图分享网 2022-11-07 16:17:31 399阅读 0评论

1. 异常处理的基本概念

异常是任何可能导致当前正在执行的程序暂停并导致状态更改以执行代码来处理该异常的事件。Armv8体系结构将异常分为两大类:同步异常和异步异常。

 1.1同步异常

同步异常是指处理器执行某条指令而直接导致的异常,往往需要在异常处理函数处理该异常之后,处理器才能继续执行。这意味着同步异常与执行流同步。

常见的同步异常如下:

尝试访问一个异常等级不恰当的寄存器。
尝试执行没有定义的指令
使用没有对齐的SP
尝试执行与PC指针没有对齐的指令。

 1.2 异步异常

异步异常是指异常触发的原因与处理器当前正在执行的指令无关的异常,中断属于异步异常的一种。因此与当前指令流不同步。这意味着无法准确保证何时会发生异步异常。Armv8-A 架构只要求它在有限的时间内发生。也可以暂时屏蔽异步异常。这意味着异步异常可以在发生异常之前处于挂起状态。

 常见的异步异常包括物理中断和虚拟中断。物理中断是响应于 PE 外部产生的信号而产生的。虚拟中断可以由外部产生,也可以由在 EL2 处执行的软件产生。

 Arm 架构有两种中断类型,IRQ 和 FIQ。在旧版本的 Arm 架构中,FIQ 被用作更高优先级的快速中断。在Armv8-A 和 Armv9-A 中 FIQ 与 IRQ 具有相同的优先级。

 IRQ 和 FIQ 具有独立的路由控制,通常用于实现安全和非安全中断。

 Armv8.8-A 和 Armv9.3-A 添加了不可屏蔽中断 (NMI) 。

 2. 异常处理及返回

当发生异常时,中断当前程序流程。处理元件 (PE) 将更新当前状态并分支到向量表中的某个位置。通常这个位置将包含通用代码,用于将当前程序的状态推送到堆栈上,然后分支到进一步的代码。

 当发生异常时,必须保留当前状态以便可以返回。PE 会自动保存异常返回地址和当前PSTATE.存储在通用寄存器中的状态必须由软件保存。然后,PE 会将当前更新为PSTATE体系结构中为该异常类型定义的类型,并分支到向量表中的异常处理程序。

 获取异常的PSTATE位置存储在 System registerSPSR_ELx中,其中 <x> 是获取异常的异常级别的编号。异常返回地址存储在 中ELR_ELx,其中 <x> 是异常被处理到的异常级别。

 软件可以通过从 AArch64 执行 ERET 指令来启动异常返回。这将根据SPSR_ELx的值配置返回的异常级别,其中 <x> 是返回的级别。SPSR_ELx包含要返回的目标级别和目标执行状态。

 执行 ERET 指令时,状态将从SPSR_ELx 中恢复,程序计数器将更新为ELR_ELx中的值。

免责声明:

1、本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

2、本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。

3、本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

4、侵权违法和不良信息举报 举报邮箱:cnddit@qq.com

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
验证码
评论列表 (暂无评论,399人围观)

还没有评论,来说两句吧...