Linux 中断
中断
几个概念
1.1 中断机制的目的和作用
- 外设异步通知CPU,比如定时器时间到、 或者收到一帧什么消息
- CPU之间,在多CPU系统,一个CPU要给另一个CPU发消息,可以发送IPI也就是处理器间的中断
- 处理CPU异常,异常中断
- 早期系统调用是靠中断指令来实现
1.2 中断产生来源
- 外设,外设产生的中断信号是异步的,一般也叫硬件中断
- CPU,是指一个CPU给另一个CPU发送IPI,这种中断叫处理期间中断
- CPU异常,一般CPU把自己的异常按照能不能修复,分为三种异常,1.塌陷(trap),不需要修复,中断处理完后执行下一条指令,2.故障,需要修复也可能修复,中断处理完后重新执行之前的指令,3。 中止,需要修复,但无法修复,中断处理完后内核会崩溃,比如缺页异常
- 中断指令,直接用CPU来产生中断信号。
1.3 中断的处理
a) 执行场景
在中断产生之间,是没有这个概念的,有了中断后,将CPU分为了两个执行场景,为进程执行场景 和 中断执行场景,进程的执行是进程执行场景,同步中断的处理也是进程执行场景,异步中断的处理是中断处理场景。理解为因为同步中断处理是当前指令触发的,可以看作是进程的一部分,而异步中断的处理和当前指令无关。
- 进程执行场景可以调度,可以休眠,而中断执行场景无法调度也无法休眠
- 在进程执行场景中可以接受中断信号,但在中断执行场景是屏蔽了中断信号的,所以如果中断执行场景的时间太长,会影响对新中断的信号的响应性,所以应尽可能的缩短中断执行场景,那么对异步的中断处理有几种方法:
1. 立即完全处理
对简单的异步中断完全处理