Linux间断和中断处理
Linux中断和中断处理
中所周知,处理器的速度跟外围的硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器发送一个请求,然后专门等待回应的办法,显然差强人意。既然硬件处理的这么慢,那么内核就应该在这期间去处理其他事务,等待硬件真正完成了请求的操作后,再回过头来对它进行处理。
轮询(polling)可能会是一种解决办法。它可以让内核定期对设备的状态进行查询,然后做出相应的处理。不过这种方法可能会让内核做不少不用功。更好的办法是提供一种机制,让硬件在需要的时候想内核发出信号,这就是中断机制。
中断
中断使得硬件得以发出通知给处理器。在你敲击键盘的时候,键盘控制器会发送一个中断,通知操作系统有键按下。中断本质上是一种特殊的电信号,有硬件设备向处理器发出。处理器收到中断后,会马上向操作系统反应此信号的到来,然后就由操作系统负责处理这些新到来的数据。硬件设备生成中断的时候并不考虑处理器的时钟同步---换句话说就是中断随时产生,因此,内核随时可能因为新到来的中断而被打断。
中断处理程序
在相应一个特定中断的时候,内核会执行一个函数,该函数叫作中断处理程序或中断服务例程(interrupt service routine,ISR)。产生中断的每个设备都有一个相应的中断处理程序。
中断上下文