在响应一个特定中断的时候,内核会执行一个函数,该函数叫做中断处理程序或中断服务例程。
产生中断的每一个设备都有一个相应的中断处理程序。
一个设备的中断程序是它设备驱动程序的一部分,设备驱动程序是用于对设备进行管理的内核代码。
在Linux中,中断处理程序看起来是普普通通的C函数。
这些函数必须按照特定的类型声明,以便内核能够以标准的方式传递处理程序的信息。
中断处理程序与其它内核函数的真正区别在于:中断处理程序被内核调用来响应中断,它们运行于中断上下文的特殊上下文中。
上半部与下半部的对比:通常把中断处理切为两个部分或两半。
中断处理程序是上半部接收到一个中断,立即开始执行,但只做有严格时限的工作,这些工作都是在所有中断被禁止的情况下完成。
能够被允许稍后完成的工作会推迟到下半部。
在合适的时机,下半部会被开中断执行。
CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断,当出现需求时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程,即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,每个设备都要使用中断,每个设备也就需要一个传送中断请求的通道,而CPU中只有一条接收中断请求的引脚,因此需要有一个机构来收集各个设备产生的各种中断请求,并按优先级排列送给CPU,这个机构称为中断控制器,早期的中断控制器是一片8259集成芯片,可以接收8个中断请求信号,也就是可以有8个中断通道,PC机允许使用15个中断通道,因此需要两片8259芯片,现在的微机仍然维持了这个结构,不过8259芯片已不是独立的芯片,而被进一步集成到其它的大规模芯片中了。
CPU响应中断之后,经过某些操作,转去执行中断服务程序。
这些操作是由硬件直接实现的,把它称为中断隐指令。
中断隐指令并不是指令系统中的一条真正的指令,它没有操作码,所以中断隐指令是一种不允许、也不可能为用户使用的特殊指令。
其所完成的操作主要有:保存断点、暂不允许中断、引出中断服务程序。