ARMv8 中断管理(2): 中断的生命周期

一个中断完整的生命周期大概包括:

  1. 产生中断
  2. 中断分发: by Distributor or Redistributor
  3. 中断传递: deliver to CPU Interface
  4. 中断激活: pending->active
  5. 优先级下降: priority drop
  6. 中断失效: active->inactive

中断的产生

外设传来中断信号,或者处理器触发 SGI, GIC 此时将该中断标记为pending状态。

中断的分发

中断生命周期中的重要部分,根据中断的类型不同可能由 Distributor 和 Redistributor 负责分发工作。

分发器查配置得到此中断的优先级,目的 CPU 等信息。此时可能有多个中断想要发往同一 CPU, 优先级决定先分发哪个中断。将其顺利分发目的 CPU 的 CPU Interface

中断传递

CPU Interface 做最后一步检查,是否满足优先级屏蔽? 是否符合抢占条件?

如果条件都满足,给 CPU 一个信号,CPU 准备激活中断

TODO: 关于running priorityhighest pending priority的解释

中断激活

CPU 此时将触发 IRQ/FIQ,执行对应的中断服务程序。

中断服务程序中需要显式的执行一些操作将中断状态由 pending 置为 active。

异常向量(中断处理函数)的详细步骤见下一节

优先级下降和中断失效

优先级下降和中断的失效可以配置为同时发生,实际中我们也是这么使用的。

TODO: 何种情况下需要将其分开?

中断服务函数结束后,需要执行一些额外的步骤来使中断失效,便于在该 CPU 上 pending 的其他中断能够进来。

优先级下降意味着降低抢占的优先级限制,允许 CPU 上等待的其他中断进来。

然后执行中断失效过程,将其状态由 active->inactive, 至此中断的整个生命周期结束。

小结

中断激活到中断失效的整个过程都属于中断服务程序的部分,由开发者显式控制, 将在下一节进行介绍。


创建于: 2023-04-12T23:51:49, Lastmod: 2024-05-12T21:54:13