作者:罗宇哲,中国科学院软件研究所智能软件研究中心
上一期中我们介绍了ARM64体系的异常,这一期我们将介绍ARM64体系中通用中断控制器(General Interrupt Controller,GIC)的中断处理流程。
一、GICv3简介[1]
中断是外设给处理器传递信息的一种方式,外设中断相对于处理器通常是异步的。ARM64体系中外设中断是通过通用中断控制器转发给处理器的。通用中断控制器是支持和管理中断的硬件部件,它提供了用于管理中断源、中断行为和将中断路由至一个或多个处理器的寄存器。GICv3(General Interrupt Controller Version 3)支持ARMv8-A 架构,其硬件架构定义了:
- 处理中断的硬件规范,这些中断发生在连接到GIC的处理器上;
- 中断控制器的用户编程接口,该接口既适应单处理器又适应多处理器;
对于每一个处理器,GIC描述了系统内的不同中断是如何产生外部中断请求(IRQ)和快速中断请求(FIQ)的,而ARMv8-A异常模型(Exception Model)则描述了处理器是如何处理这些IRQ和FIQ中断请求的。
GIC用于处理外设中断,外设中断表现为发送给GIC的信号。GIC定义了四种外设中断:
- Locality-specific Peripheral Interrupt (LPI):一种基于消息的边沿中断[2](硬件中有边沿触发和电平触发的概念,电平触发是在高或低电平保持的时间内触发,而边沿触发是由高到低或由低到高这一瞬间触发 [3];