第三十一期-ARM Linux内核的中断(1)

作者:罗宇哲,中国科学院软件研究所智能软件研究中心

上一期中我们介绍了Linux内核的异常,在从这一期开始的接下来六期中我们将介绍ARM Linux内核的中断,首先我们将介绍GICv3的中断状态。

一、GICv3的中断状态

我们在第27期时提到过,ARM64体系的异常可以分为同步异常和异步异常[1],外设所发出的中断就是一种异步异常。用户敲击键盘或点击鼠标的行为产生的外设中断可能在程序运行的任意时刻发生,从而与指令的执行是异步的。

在第28期的时候我们介绍了GICv3。ARMv8-A架构的处理器在接收外设中断时,外设中断会先通过通用中断控制器(General Interrupt Controller,GIC)进行转发。GIC会根据中断的类型将中断通过CPU接口转发至合适的CPU进行处理。

GIC为每一个所支持的中断都维护了状态,这些状态共有四种[1][2]:

  • Inactive:中断既不在active状态也不在pending状态,中断源没有发送中断;

  • Pending:处理器确认硬件或软件产生了中断,中断等待相关处理器的处理;

  • Active:处理器确认并正在处理一个中断,因此另一个相同中断源发送的中断只有在该中断不再处于Active状态后才会被处理器接受;

  • Active and Pending:处理器正在处理中断,相同的中断源又发送了一个中断。

中断源指的是引起中断的原因或能够发出中断请求信号的来源。中断的四种状态之间可以互相转换,其状态转换关系图如下图所示[2]:
第三十一期-ARM Linux内核的中断(1)_第1张图片

各个状态间的转移条件为[2]:

  • 状态转移A1和A2:当外设或软件产生中断时发生该状态转移,中断增加了pending状态;

  • 状态转移B1和B2:当外设取消一个电平敏感的中断或软件改变中断的pending状态时发生此状态转移,中断的pending状态被移除了;

  • 状态转移C:当处理器确认边沿敏感的SPI、SGI和PPI时发生此状态转移,中断的pending状态变为了active状态;

  • 状态转移D:当处理器确认电平敏感的SPI、SGI和PPI时发生此状态转移,中断的pending状态变为了active and pending状态;

  • 状态转移E1和E2:当软件使SPI、SGI和PPI失活时发生此状态转移,active状态被移除了;

有关SPI或边沿敏感等中断种类的知识可以在第28期找到。

二、结语

本期我们介绍了中断的基本状态,下一期我们将从硬件的视角介绍ARM Linux内核的中断处理基本流程。

参考文献
[1] 《Linux内核深度解析》,余华兵著,2019
[2] ARM® Generic Interrupt Controller Architecture Specification GIC architecture version 3.0 and version 4.0 Beta

你可能感兴趣的:(第三十一期-ARM Linux内核的中断(1))