ARM64异常处理-异常类型

71 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

在ARM64架构里,中断属于异常的一种。中断是外部设备通知处理器的一种方式,它会打断处理器正在执行的指令流。

中断

在ARM处理器中,中断请求分成中断请求(Interrupt Request,IRQ)和快速中断请求(Fast Interrupt Request,FIQ)两种,其中FIQ的优先级要高于IRQ。在芯片内部,分别有连接到处理器内部的IRQ和FIQ两根中断线。通常系统级芯片内部会有一个中断控制器,众多的外部设备的中断引脚会连接到中断控制器,由中断控制器来负责中断优先级调度,然后发送中断信号给ARM处理器,

外设中发生了重要的事情之后,需要通知处理器,中断发生的时刻和当前正在执行的指令无关,因此中断的发生时间点是异步的。对于处理器来说,这常常是猝不及防的,但是又不得不停止当前执行的代码来处理中断。在ARMv8架构中,中断属于异步模式的异常。

中止

中止主要有指令中止(instruction abort)和数据中止(data abort)两种,它们通常是指访问外部存储单元时候发生了错误,处理器内部的MMU捕获这些错误并且报告给处理器。 指令中止是指当处理器尝试执行某条指令时发生的错误。而数据中止是指使用加载或者存储指令读写外部存储单元时发生的错误。

复位

复位(reset)操作是优先级最高的一种异常处理。复位操作通常用于让CPU复位引脚产生复位信号,让CPU进入复位状态,并重新启动。

软件产生的异常

ARMv8架构中提供了3种软件产生的异常。这些异常通常是指软件想尝试进入更高的异常等级而造成的错误。 SVC指令:允许用户模式的程序请求操作系统服务。 HVC指令:允许客机(guest OS)请求主机服务。 SMC指令:允许普通世界(normal world)中的程序请求安全监控服务。