IRQ是用来暂停当前正在运行的程序,并跳转到其他程序运行的必要机制。该机制称为中断处理。中断处理在硬件控制中担当着重要角色。因为如果没有中断处理,就有可能出现无法顺畅进行的情况。

     从中断处理开始到请求中断的程序(中断处理程序)运行结束之前,被中断的程序(主程序)的处理是停止的。这种情况就类似于在处理文档的过程中有电话打进来,电话就相当于中断处理。假如没有中断功能的话,就必须等到文档处理完毕才可以接听电话。这样就太不方便了。由此可见,中断处理有着很大的价值。就像接听完电话后返回到原来的文档作业一样,中断处理程序运行结束后,处理也会返回到主程序中继续(图 11-6 )。

中断后续axios的请求 中断请求处理_中断请求

 

       实施中断请求的是连接外围设备的I/O控制器,负责实施中断处理程序的是CPU。为了进行区分,外围设备的中断请求会使用不同于I/O端口的其他编号,该编号称为中断编号。

      假如同时有多个外围设备进行中断请求的话,CPU也会为难。为此,我们可以在I/O控制器和CPU中间加入名为中断器的IC来进行缓冲图11-7。

中断后续axios的请求 中断请求处理_中断请求_02

 

       CPU接收到来自中断控制器的中断请求后,会把当前正在运行的主程序中断,并切换到中断处理程序。中断处理程序的第一步处理,就是把 CPU 所有寄存器的数值保存到内存的栈中。在中断处理程序中

完成外围设备的输入输出后,把栈中保存的数值还原到 CPU寄存器中,然后再继续进行对主程序的处理。假如 CPU 寄存器的数值没有还原的话,就会影响到主程序的运行,甚至还有可能会使程序意外停止或者发生运行异常。这是因为主程序在运行过程中,出于某些原因用到 CPU 寄存器。而这时如果突然插人别的程序,主程序必然会受到影响。因此,在中断请求完毕后,各寄存器的数值必须要还原到中断前的状态。只要寄存器的值保持不变,主程序就可以像没有发生任何事情一样继续处理(图 11-8 )。

中断后续axios的请求 中断请求处理_寄存器_03