7.4 本章小结
本章开头提出的问题的参考答案如下。
-
I/O设备有哪些编址方式?各有何特点?
I/O 设备的编址方式主要有统一编址和独立编址。
统一编址是指将主存地址空间的一部分分配给I/O端口,CPU可使用普通访存指令直接访问I/O设备,编程简便;但会占用主存地址空间,减少可用主存容量。独立编址是指I/O地址空间与主存地址空间相互独立,I/O端口不占用主存资源;但访问I/O设备需使用专用I/O指令(如IN、OUT),增加了指令集的复杂性。 -
CPU响应中断应具备哪些条件?
- CPU内部的中断屏蔽触发器处于开放状态。
- 外设发出中断请求,且其接口中的中断请求触发器置为“1”,以维持中断请求信号。
- 外设接口的中断允许触发器为“1”,才能将中断请求送达CPU。
当上述三个条件同时满足时,CPU在当前指令执行结束后响应中断。
7.5 常见问题和易混淆知识点
-
在开中断情况下,CPU检测到中断就一定会立即响应吗?
是的。在开中断状态下,CPU总在每条指令执行结束时采样中断请求。一旦检测到中断请求,即表明该请求未被屏蔽且有效,CPU必定会立即响应。
需要说明的是:在单重中断系统中,进入中断服务程序后通常会自动关中断,此后即使有新的中断请求也无法被检测,但这不属于“开中断”情形,违背题设前提。而在多重中断系统中,高优先级中断可在低优先级的中断服务程序执行期间被检测并响应,因其未被屏蔽。
-
向量中断、中断向量、向量地址三个概念是什么关系?
中断向量:中断向量指中断服务程序的入口地址。每个中断源对应一个唯一的中断服务程序,其入口地址即为该中断源的中断向量。系统通常将所有中断向量集中组织成一张中断向量表;也有系统在表中存放转移指令,构成中断向量转移表。向量地址:向量地址指中断向量表(或转移表)中某一项的内存起始地址。它通常由中断类型号(也称中断号)乘以表项长度计算得出。例如,若表项占4字节,中断类型号为5,则向量地址为 (假设表从0开始)。因此,向量地址是CPU用于定位中断向量的“索引位置”。向量中断:是一种能够自动识别中断源并快速转移至对应服务程序的中断处理方式。当中断发生时,中断源(或中断控制器)向CPU提供中断类型号,CPU据此生成向量地址,并从向量表中取出对应的中断向量(入口地址),直接转移执行相应的中断服务程序。 -
程序中断和调用子程序有何区别?
虽然程序中断和子程序调用都会引起程序执行流程的转移,但二者在本质上存在显著差异,主要体现在以下几个方面:
- 触发时机:子程序调用由程序员通过CALL指令主动发起,发生时刻和位置是确定的;而中断由外部设备或内部事件随机触发,CPU只在每条指令执行结束时采样中断请求,一旦条件满足便转入中断处理,具有明显的异步性和不可预测性。
- 服务关系:子程序完全为主程序服务,二者构成主从关系:主程序在需要时调用子程序,执行完毕后返回主程序继续运行。中断服务程序通常与主程序无直接关联,是为响应外部事件(如数据到达、定时器溢出等)而执行的独立任务,二者属于平行关系。
- 实现机制:子程序调用是纯软件行为,只需利用堆栈保存返回地址,无须额外硬件支持;而中断处理依赖软硬件协同,需借助中断请求线、中断控制器和优先级判优电路等硬件,才能完成中断请求的接收、判优、响应和断点保护等操作。
- 嵌套级别:子程序可多层嵌套,嵌套深度主要受限于系统堆栈空间;中断嵌套则受优先级机制约束——只有更高优先级的中断才能打断当前正在执行的中断服务程序。出于硬件复杂性和实时性考虑,实际系统中中断优先级通常较少,嵌套层次有限。
