中断是计算机处理器用于响应输入/输出设备请求或异常事件的一种机制。当有需要处理的事件(例如外设传输完毕或者发生硬件故障等)发生时,中断信号会发送给CPU,CPU就会中止当前正在执行的程序,并转入处理中断程序。在处理完成后,CPU再恢复之前任务的执行状态。
中断的优点在于充分利用了计算机资源,不需要等待某个事件处理完成才能进行下一个任务,而是可以立即处理其他任务。
中断被广泛应用于操作系统、驱动程序和各类高级语言编程中。
中断可分为两类:硬件中断和软件中断。硬件中断是由外设引发的,而软件中断则是由程序运行时所产生的。在中断处理期间,CPU默认会关闭中断(屏蔽所有中断),以确保中断处理程序的正确性。
硬件中断可以继续分为外部中断和内部中断。外部中断是由外部事件引发的中断,常见的有时钟中断和外设中断。内部中断是由CPU内部的一些事件引起的,常见的有异常中断、系统调用和软中断等。
中断处理程序运行的时候,系统需要保证CPU中的寄存器、状态标志、当前指令地址等信息不会被覆盖,因此中断处理程序需要保存现场。常见的保存现场方式包括把寄存器的值保存在堆栈中,或者在内存中为现场专门分配一块保存区域。
当出现中断时,处理器首先会检查中断屏蔽位是否被置位,如果为真,则中断被屏蔽。否则,处理器会立即响应中断,在响应过程中,会按照一定的顺序保存特定的寄存器,以及现场内容,然后转到中断处理程序所在的地址执行。
中断处理程序执行结束后,会通过清除标志位的方式恢复中断,然后从现场恢复状态,处理器即可继续执行中断前的程序。
为了解决多个中断同时发生的情况,需要给每个中断赋予不同的优先级。处理机在处理中断时,按照优先级由高到低的顺序进行处理。
中断还可以嵌套,即在中断处理程序中又可能会产生其他中断需求。此时,可以通过保存上下文,以备后续处理完当前中断后再恢复上一个中断的处理。