任何操作系统都必须对计算机上的硬件设备进行有效管理。处理器的速度跟外围设备的速度不在一个数量级上,硬件的响应速度慢,内核应该在此期间处理其他事物,等到硬件真正完成请求操作再对他进行处理。
轮询不是好主意,有一种好的机制:让硬件在需要的时候向内核发出信号,这就是中断机制。(变内核主动为硬件主动)
中断本质上是一种特殊的电信号,由硬件发向处理器。
特定的中断总是与特定的设备相关联,并且内核知道这些信息。硬件发出中断是为了引起内核关注,等待内核处理:有新的按键等待处理,读取并处理这些东西吧!
中断是异步的。
异常
异常称为同步中断。在产生时必须考虑与处理器时钟同步。编程失误而导致的除0错误或者执行期间的缺页,都产生异常。
中断处理程序
中断处理程序运行于中断上下文(原子上下文),该上下文的执行代码不可阻塞。
上半部与下半部对比
想让中断程序运行快,又想其完成工作量多是矛盾的。一般把中断处理切为两个部分。中断处理程序是上半部-----接收到一个中断,它就立即开始执行,但只做严格时限的工作,例如对接收中断进行应答或复位硬件,能够被允许稍后完成的工作会推迟到下半部。
中断处理程序一般都需要通过操作硬件对中断到达进行确认,有时会从硬件拷贝数据,这些操作对时间很敏感,需要中断处理程序自己完成。
中断上下文
进程上下文是一种内核所处的操作模式,此时内核代表进程执行---例如执行系统调用或者运行内核线程。
中断上下文具有严格的时间限制,它打断了其他代码。中断上下文的代码应当迅速、简洁,尽量不使用循环处理繁重的工作。
参考文献:linux内核设计与实现