直接程序控制方式和中断方式是计算机系统中两种基本的输入/输出(I/O)控制机制,用于协调CPU与外部设备之间的数据传输。
-
直接程序控制方式
- 无条件传送:假设外设始终准备就绪,CPU可随时进行数据读写。适用于简单、低速设备(如开关、LED)。
优点:控制简单。
缺点:可靠性差,若外设未就绪会导致数据错误。 - 程序查询方式:CPU在传输前先读取外设的状态寄存器,确认其是否就绪(如“忙”或“完成”标志),只有状态就绪时才进行数据传送。
例如:CPU不断轮询打印机是否空闲,直到空闲才发送下一批数据。
缺点:占用大量CPU时间,效率低下,尤其在多任务或高速设备场景中表现更差。
- 无条件传送:假设外设始终准备就绪,CPU可随时进行数据读写。适用于简单、低速设备(如开关、LED)。
-
中断方式
- 改进了程序查询的“主动等待”问题。当外设完成操作后,主动向CPU发出中断请求信号。
- CPU接收到中断后,暂停当前任务,保存现场,转去执行对应的中断服务程序(ISR),处理完I/O后再恢复原程序运行。
- 显著提升CPU利用率,使其能在I/O等待期间执行其他任务。
- 多中断源处理方法:
- 多中断信号线法:每个设备有独立中断线,硬件成本高。
- 中断软件查询法:共用一条中断线,CPU通过软件依次查询哪个设备请求中断。
- 菊花链法:采用优先级链式结构,响应顺序由物理连接决定。
- 总线仲裁法:结合总线控制权竞争机制,实现公平调度。
- 中断向量法:最常用,每个中断源对应一个中断向量(地址),可快速定位服务程序入口,支持高效响应。
✅ 总结对比:
| 方式 | CPU效率 | 实时性 | 硬件开销 | 适用场景 |
|---|---|---|---|---|
| 无条件传送 | 低 | 差 | 低 | 极简单设备 |
| 程序查询 | 较低 | 差 | 低 | 少量I/O、实时要求不高 |
| 中断方式 | 高 | 好 | 中 | 多类外设、需及时响应 |
中断向量表(Interrupt Vector Table, IVT)是系统中用于管理中断服务程序入口地址的一个关键数据结构。它的主要作用是将每个中断源与对应的中断服务程序(ISR)快速关联起来,从而实现中断的高效响应。
一、中断向量表的作用:
-
存储中断服务程序入口地址:
每个中断类型对应一个唯一的中断号(如0号为除法错误,32~255为外部设备中断等),中断向量表中每个表项存放该中断号对应的服务程序起始地址(即“中断向量”)。 -
实现快速跳转:
当CPU接收到中断请求并获得中断类型号后,可通过该号码作为索引,在中断向量表中直接查找目标服务程序地址,无需软件轮询或判断。 -
支持多中断源管理和优先级处理:
结合中断控制器(如8259A),可对多个外设中断进行屏蔽、排队和分发,确保正确调用相应ISR。 -
提高系统实时性与效率:
避免了中断软件查询方式中的延迟,使系统能迅速响应紧急事件。
二、如何根据中断类型号查找服务程序?
假设使用x86架构实模式下的中断机制:
-
中断类型号获取:
- 外设发出中断请求 → 中断控制器(如8259A)将中断类型号送至CPU数据总线。
- CPU读取该中断号(例如:类型号为
n)。
-
计算中断向量偏移地址:
- 每个中断向量占4字节(2字节段地址 + 2字节偏移地址)。
- 查找位置 =
n × 4(因为每个表项4字节)。 - 例如:中断号
n=3,则其向量位于内存地址0x0000:0x000C处。
-
读取并向量跳转:
- CPU从该地址读取4字节内容,前2字节为IP(指令指针),后2字节为CS(代码段)。
- 将CS:IP载入CPU寄存器,开始执行对应的中断服务程序。
; 示例:中断号 n=3 的向量存放在 0x000C 开始的位置
; 假设内存 [0x000C] = 0x1000 (IP)
; [0x000E] = 0x2000 (CS)
; 则服务程序物理地址 = 0x2000 << 4 + 0x1000 = 0x21000
在保护模式下,中断向量表被中断描述符表 IDT 取代,使用门描述符(中断门、陷阱门)包含选择子和偏移量,通过IDTR寄存器定位,机制更复杂但安全性更高。
✅ 总结:
- 中断向量表是连接中断事件与处理函数的核心桥梁。
- 利用中断类型号作为索引,实现O(1)时间复杂度的快速定位。
- 是现代操作系统实现设备驱动、异常处理和系统调用的基础机制之一。


1756

被折叠的 条评论
为什么被折叠?



