第二十八期-ARM64体系的异常与中断(2)
第二十八期-ARM64体系的异常与中断(2)
作者:罗宇哲,中国科学院软件研究所智能软件研究中心
上一期中我们介绍了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;由中断信号边沿触发的中断称为边沿中断)。其特别之处在于,该中断不需要通过中断线发送中断信号,而通过总线写GIC中的寄存器来发送中断信息。基于消息的中断流程如下图所示:
- Private Peripheral Interrupt(PPI):发送给特定处理器的外设中断,不同的处理器对于不同事件可以用相同的中断号(一个中断可以用一个ID号表示,称为中断ID号)。
- Shared Peripheral Interrupt(SPI):GIC将该种类型的中断路由给能处理该中断的处理器,不限于特定的处理器。
- Software Generated Interrupt(SGI):该种类型的中断用于处理器间通信,通过写GIC中的SGI寄存器产生。
GICv3的硬件架构图如下图所示4:
可以看出GICv3由Distributor、Redistributor、CPU Interface和ITS四个部分组成,它们的功能是:
- Distributor:为SPI提供路由配置并保存相关的路由信息和优先级信息;
- Redistributor:为PPI提供配置,将处于pending状态的最高优先级的中断在有限时间内发送给CPU接口;
- CPU Interface:CPU Interface提供一个连接处理器(Processing Element,PE)与GIC的接口;
- ITS(Interrupt Translation Service):将事件转化为LPI(可选的)。
GIC处理物理中断的流程如下图所示5:
各个阶段的含义为:
- Generate:外设或软件产生中断;
- Distribute:设定中断的分组和优先级,并路由至CPU接口(CPU接口提供了处理器和GIC连接的接口);
- Deliver:CPU接口将中断传给其对应的处理器;
- Activate:当处理器得知中断的存在时,GIC将被**的中断设置为最高优先级,从而对SPI、PPI和SGI来说中断变成**态;
- Priority Drop:处理器上运行的软件向GIC发送信号表明最高优先级的中断已经可以降级为被处理前的优先级状态了;
- Deactivation:清除中断的**状态,可以被配置为和Priority Drop同时发生。
二、结语
本期我们考察了ARMv8-A架构中GIC(General Interrupt Controller)的中断处理流程,下一期我们将介绍Linux内核中的中断处理流程。
-
ARM® Generic Interrupt Controller Architecture Specification GIC architecture version 3.0 and version 4.0 Beta ↩︎
-
http://www.lujun.org.cn/?p=3921 ↩︎
-
https://blog.****.net/Gdadiao123/article/details/80958165 ↩︎
-
ARM® Generic Interrupt Controller Architecture Specification GIC
architecture version 3.0 and version 4.0 Beta ↩︎ -
ARM® Generic Interrupt Controller Architecture Specification GIC
architecture version 3.0 and version 4.0 Beta ↩︎