什么是硬件中断请求号?什么是中断向量号?
一、硬件中断请求号(IRQ,Interrupt Request Number)
定义:
硬件中断请求号(IRQ)是硬件设备向CPU发送中断请求时使用的唯一标识符,用于区分不同的中断源。例如,键盘、硬盘等外设通过特定的IRQ号通知CPU需要处理的事件。
核心特性:
- 硬件驱动:由硬件中断控制器(如x86的8259A、ARM的GIC)分配和管理,不同设备的中断请求通过独立的IRQ线传输。
- 传统x86架构中,IRQ号范围通常为0~15(如IRQ0对应系统计时器,IRQ1对应键盘);
- 现代系统(如多核CPU)扩展了IRQ范围,支持更多设备。
- 资源复用:由于物理中断线数量有限(如早期仅有16条),Linux等操作系统支持IRQ共享,允许多个设备共享同一IRQ号,通过
dev_id
区分具体中断源。 - 动态分配:在支持即插即用(PNP)的系统中,IRQ号可动态分配给设备(如PCI设备),避免冲突。
示例(传统x86系统):
IRQ号 | 对应设备 |
---|---|
0 | 系统计时器 |
1 | 键盘 |
6 | 软盘控制器 |
14/15 | 主/从硬盘控制器 |
二、中断向量号(Interrupt Vector Number)
定义:
中断向量号是CPU用于定位中断处理程序入口地址的索引值。每个中断号对应一个中断向量,指向内存中存储的中断服务程序(ISR)入口地址。
核心特性:
- 地址映射:在实模式下,中断向量号与物理地址直接关联。例如:
- x86架构:中断向量号N对应的入口地址为
0x0000:N×4
(4字节存储段地址和偏移量)。 - ARM架构:向量表地址由协处理器配置,如GIC中断控制器将硬件中断ID映射到向量号。
- x86架构:中断向量号N对应的入口地址为
- 分类与用途:
- 异常处理:向量号0~31保留给CPU内部异常(如除零错误、缺页异常);
- 外设中断:向量号32及以上用于硬件中断(如IRQ0映射到向量32);
- 软中断:向量号128等用于系统调用或自定义中断。
- 动态管理:现代操作系统(如Linux)通过中断描述符表(IDT)动态分配向量号,支持多核负载均衡和热插拔。
示例(x86系统部分向量号):
向量号 | 用途 |
---|---|
0x00 | 除零错误 |
0x08 | 双故障(系统严重错误) |
0x20 | 定时器中断(IRQ0) |
0x80 | Linux系统调用入口 |
三、IRQ与中断向量号的关系
- 硬件到逻辑的映射:
- IRQ是硬件层面的中断标识,而中断向量号是CPU逻辑层的中断索引。例如,IRQ1(键盘)可能映射到向量号0x21(十进制33)。
- 操作系统中介入:
- 在Linux中,中断控制器(如APIC)将硬件中断ID转换为IRQ号,再通过
irq_desc
结构关联到向量号和对应的ISR。
- 在Linux中,中断控制器(如APIC)将硬件中断ID转换为IRQ号,再通过
- 多核扩展:
- 多核系统中,同一IRQ号可路由到不同CPU核心,而向量号保持全局唯一性以实现中断分发。
四、总结对比
特性 | 硬件中断请求号(IRQ) | 中断向量号 |
---|---|---|
作用 | 标识外设的中断请求源 | 索引中断服务程序入口地址 |
分配方式 | 硬件中断控制器或动态分配(PNP) | 操作系统通过中断向量表或IDT动态管理 |
范围 | 有限(如0~15传统x86)或扩展(现代系统上千) | 0~255(x86实模式)或更大(保护模式) |
硬件依赖 | 直接关联物理中断线 | 依赖CPU架构和内存管理机制 |
实际应用:
- 编写设备驱动时,需通过IRQ号注册中断处理函数,内核将其绑定到对应的向量号;
- 调试中断冲突时,需检查
/proc/interrupts
文件中的IRQ分配情况。
如需进一步了解具体设备的IRQ映射或中断处理流程,可参考硬件手册或Linux内核文档。