Linux 内核 - 中断

我们两清 提交于 2019-12-21 01:13:31

中断和异常

  • 中断使得硬件能够发出通知给处理器。

  • 每个中断都通过一个唯一的数字标识(称为 IRQ 线),不同的设备对应不同的中断。

  • 在处理器执行到由于编程失误而导致的错误指令的时候,或者是在执行期间出现特殊情况(如缺页),必须靠内核来处理的时候,处理器就会产生一个异常。

中断处理程序

  • 中断发生时,内核会执行的一个函数,称为中断处理程序/中断服务例程。

  • 因为中断可能随时发生,即中断处理程序可能随时执行,所以必须确保中断处理程序能够快速执行,以尽快恢复被中断的代码的执行。

  • 为了满足上述目标,一般把中断处理划分为上下两部。

    • 中断处理程序是上半部,它接收到一个中断后,就立即开始执行,但只做有严格时限的工作。这些工作都是在所有中断被禁止的情况下完成的。
    • 允许稍后完成的工作会推迟到下半部,在以后的某个合适的时机,下半部会被执行。
  • 中断处理程序无需是可重入的。当一个给定的中断处理程序正在执行时,相应的中断线在所有处理器上都会被屏蔽掉,以防止在同一中断线上接收另一个新的中断。而其他的中断都是打开的,所以这些不同中断线上的其他中断都能被处理,但当前中断线总是被禁止的。

中断上下文

  • 当执行一个中断处理程序时,内核处于中断上下文中。
  • 中断上下文没有后备进程,所以中断上下文不可以睡眠(如果可以睡眠,那怎么再对它进行重新调度以使其再次运行呢?)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!