当流水线中断发生后,当前执行被打断,处理器自动进入更高的权限状态(如内核态),执行中断处理程序,处理中断,并在处理完成后恢复原正常执行。
当处理器流水线在检测到中断发生时,通常将中断附加在当前流水线中的一条指令上,并在该指令可以触发流水线例外时,清空当前流水线,将处理器设置为更高的权限状态,硬件保存部分中断现场,并根据例外类型,将对应的中断处理程序的入口装入流水线程序计数器中,从而使得处理器接下来执行中断处理程序。
根据中断信号的来源,流水线中断分为外部中断(external interrupt)和内部中断(internal interrupt)。外部中断来自处理器流水线的外部,包括外部设备,或多核处理器中的其他处理器核。外部设备例如硬盘、网卡、键盘等,会向处理器流水线发送中断,告知处理器此外部设备有任务需要处理;多核处理器中的其他处理器核也可以向处理器流水线发送中断,通知当前处理器核去执行特定任务。内部中断来自处理器流水线内部,例如内部计时器中断、性能计数器溢出中断等。这些中断由处理器流水线内部的一些事件触发,需要处理器打断当前执行,进入内核态进行处理,例如进程的时间片用完时,由内部计时器产生中断,进入操作系统内核态,执行进程调度。
根据中断是否可以屏蔽,流水线中断可分为不可屏蔽中断(non-maskable interrupt,NMI)和可屏蔽中断(maskable interrupt)。不可屏蔽中断无法进行屏蔽,一旦发生,处理器流水线必须进行处理,通常由硬件发生的致命错误触发。可屏蔽中断指的是当前中断可以被处理器流水线屏蔽,即使中断源已经产生了中断,流水线也可以当作没有发生,不做处理。通常来说,中断屏蔽可以在外部中断控制器中实现,使得外部设备发出的中断不接入处理器流水线;也可以在流水线内部通过控制寄存器实现,即使发生了中断,流水线的执行不受干扰。可屏蔽中断还可以用于实现中断优先级,即发生了某级别的中断后,设置屏蔽更低优先级的中断,但不屏蔽更高优先级中断。
根据中断源传递到流水线的形式,可分为中断线(interrupt line)和消息中断(message signaled interrupt,MSI)。通过中断线传递中断,指的是中断源直接将中断信息通过一根物理上的信号线的方式,接入到处理器流水线中。如果中断源较多,可使用中断控制器汇总后再连入流水线,形成中断线的共享,例如PCI总线使用共计4根中断线,让所有设备共享。当共享同一根中断线的中断源较多时,处理中断的效率就会降低。通过消息中断传递中断,指的是将中断以数据的方式在总线上传递,便于多种不同中断的扩展和快速处理,例如PCIE只支持消息中断。
根据中断信号的特点,可分为电平触发(level triggered)和边沿触发(edge triggered)。电平触发的中断,在中断被流水线处理之前,需要一直保持触发状态,直到中断处理程序将信号线配置为非触发电平,这样处理器流水线可以在任意时刻采样中断并进行处理。边沿触发的中断,其发生的标记是一个脉冲,脉冲宽度则可以约定。如果脉冲宽度不足以令流水线采样得到,则需要加入额外的机制,使得流水线可以知悉边沿触发中断的发生。通常认为,消息中断都是边沿触发的中断。