在linux中,中断信号会将CPU转移到其它任务上。其它任务一般被称为中断处理程序或者中断服务程序。
中断来的时候会发生什么
中断往往由硬件设备的电子信号产生,并被引导到中断控制器上。将中断来的时候,内核将完成下列事情:
- 接收到中断后,中断控制器向处理器发送信号。
- 处理器检测到该信号并中断其当前的任务以处理中断。
- 然后处理器可以通知操作系统发生了中断,操作系统可以适当地处理中断。
不同的设备使用与每个中断相关联的唯一值与不同的中断相关联。这样操作系统能够区分中断并知道是哪个硬件设备引起了这样的中断。同时操作系统根据不同的中断执行对应的中断服务函数。
中断处理是内核执行的最敏感的任务之一,它必须满足以下条件:
- 硬件设备异步生成中断(相对于处理器时钟)。这意味着中断可能随时出现。
- 因为中断随时可能发生,内核可能正在处理其中一个,这时候另一个(不同类型的)又发生。
- 内核代码中存在一些必须禁用中断的关键区域。
中断与异常
异常通常与中断放在一起讨论。与中断不同的是,异常与处理器时钟同步发生;他们经常被称为同步中断。异常往往是在处理器执行指令时产生,以响应编程错误(例如除以零)或内核必须处理的异常情况(例如页面错误);由于许多处理器体系结构以与中断类似的方式处理异常,因此处理两者的内核基础结构是相似的。
两者的简单定义
- 中断 - 硬件产生的异步中断。
- 异常 - 处理器生成的同步中断。
x86架构上的系统调用(一种异常