让我们再来看一下图 11-4。在“I/O 范围”下面有一个“IRQ”项目,对应的值是 0x00000006 ( 06)。IRQ(Iterrupt Request) 是中断请求的意思。那么,IQ 主要是用来做什么的呢?
IRQ 是用来暂停当前正在运行的程序,并跳转到其他程序运行的必要机制。该机制称为中断处理。中断处理在硬件控制中担当着重要角色。因为如果没有中断处理,就有可能出现处理无法顺畅进行的情况。
从中断处理开始到请求中断的程序(中断处理程序)运行结束之前,被中断的程序(主程序)的处理是停止的。这种情况就类似于在处理文档的过程中有电话打进来,电话就相当于中断处理。假如没有中断功能的话,就必须等到文档处理完毕才可以接听电话。这样就太不方便了。由此可见,中断处理有着很大的价值。就像接听完电话后返回到原来的文档作业一样,中断处理程序运行结束后,处理也会返回到主程序中继续(图11-6)。
实施中断请求的是连接外围设备的 I/O 控制器,负责实施中断处理程序的是 CPU。为了进行区分,外围设备的中断请求会使用不同于 I/O端口的其他编号,该编号称为中断编号。在控制面板中查看软盘驱动器的属性时,IRQ 处显示的数值 06,表示的就是用 06 号来识别软盘驱动器发出的中断请求。另一方面,操作系统及 BIOS 则会提供响应中断编号的中断处理程序。
假如同时有多个外围设备进行中断请求的话,CPU 也会为难。为此,我们可以在I/O 控制器和CPU 中间加入名为中断控制器的IC 来进行缓冲。中断控制器会把从多个外围设备发出的中断请求有序地传递给 CPU。大家对中断控制器的认识可能比较薄弱,不过只需了解该设备的存在和角色就可以了(图 11-7)。
CPU 接收到来自中断控制器的中断请求后,会把当前正在运行的主程序中断,并切换到中断处理程序。中断处理程序的第一步处理就是把 CPU 所有寄存器的数值保存到内存的栈中。在中断处理程序中完成外围设备的输入输出后,把栈中保存的数值还原到 CPU 寄存器中,然后再继续进行对主程序的处理。假如 CPU 寄存器的数值没有还原的话,就会影响到主程序的运行,甚至还有可能会使程序意外停止或者发生运行异常。这是因为主程序在运行过程中,出于某些原因用到 CPU 寄存器。而这时如果突然插人别的程序,主程序必然会受到影响。因此,在中断请求完毕后,各寄存器的数值必须要还原到中断前的状态。只要寄存器的值保持不变,主程序就可以像没有发生任何事情一样继续处理(图 11-8 )。
标签:主程序,处理,11.4,中断请求,中断,外围设备,CPU From: https://www.cnblogs.com/z1218/p/17100459.html