中断和异常
-
中断使得硬件能够发出通知给处理器。
-
每个中断都通过一个唯一的数字标识(称为 IRQ 线),不同的设备对应不同的中断。
-
在处理器执行到由于编程失误而导致的错误指令的时候,或者是在执行期间出现特殊情况(如缺页),必须靠内核来处理的时候,处理器就会产生一个异常。
中断处理程序
-
中断发生时,内核会执行的一个函数,称为中断处理程序/中断服务例程。
-
因为中断可能随时发生,即中断处理程序可能随时执行,所以必须确保中断处理程序能够快速执行,以尽快恢复被中断的代码的执行。
-
为了满足上述目标,一般把中断处理划分为上下两部。
- 中断处理程序是上半部,它接收到一个中断后,就立即开始执行,但只做有严格时限的工作。这些工作都是在所有中断被禁止的情况下完成的。
- 允许稍后完成的工作会推迟到下半部,在以后的某个合适的时机,下半部会被执行。
-
中断处理程序无需是可重入的。当一个给定的中断处理程序正在执行时,相应的中断线在所有处理器上都会被屏蔽掉,以防止在同一中断线上接收另一个新的中断。而其他的中断都是打开的,所以这些不同中断线上的其他中断都能被处理,但当前中断线总是被禁止的。
中断上下文
- 当执行一个中断处理程序时,内核处于中断上下文中。
- 中断上下文没有后备进程,所以中断上下文不可以睡眠(如果可以睡眠,那怎么再对它进行重新调度以使其再次运行呢?)
来源:CSDN
作者:W.T.F.
链接:https://blog.csdn.net/fcku_88/article/details/103627651