ARMv8 中断管理(2): 中断的生命周期
一个中断完整的生命周期大概包括:
- 产生中断
- 中断分发: by Distributor or Redistributor
- 中断传递: deliver to CPU Interface
- 中断激活: pending->active
- 优先级下降: priority drop
- 中断失效: active->inactive
中断的产生
外设传来中断信号,或者处理器触发 SGI, GIC 此时将该中断标记为pending状态。
中断的分发
中断生命周期中的重要部分,根据中断的类型不同可能由 Distributor 和 Redistributor 负责分发工作。
分发器查配置得到此中断的优先级,目的 CPU 等信息。此时可能有多个中断想要发往同一 CPU, 优先级决定先分发哪个中断。将其顺利分发目的 CPU 的 CPU Interface
中断传递
CPU Interface 做最后一步检查,是否满足优先级屏蔽? 是否符合抢占条件?
如果条件都满足,给 CPU 一个信号,CPU 准备激活中断
TODO: 关于running priority
和 highest pending priority
的解释
中断激活
CPU 此时将触发 IRQ/FIQ,执行对应的中断服务程序。
中断服务程序中需要显式的执行一些操作将中断状态由 pending 置为 active。
异常向量(中断处理函数)的详细步骤见下一节
优先级下降和中断失效
优先级下降和中断的失效可以配置为同时发生,实际中我们也是这么使用的。
TODO: 何种情况下需要将其分开?
中断服务函数结束后,需要执行一些额外的步骤来使中断失效,便于在该 CPU 上 pending 的其他中断能够进来。
优先级下降意味着降低抢占的优先级限制,允许 CPU 上等待的其他中断进来。
然后执行中断失效过程,将其状态由 active->inactive, 至此中断的整个生命周期结束。
小结
中断激活到中断失效的整个过程都属于中断服务程序的部分,由开发者显式控制, 将在下一节进行介绍。