什么是硬件中断请求号?什么是中断向量号?

发布于:2025-05-12 ⋅ 阅读:(28) ⋅ 点赞:(0)

一、硬件中断请求号(IRQ,Interrupt Request Number)

定义​:
硬件中断请求号(IRQ)是硬件设备向CPU发送中断请求时使用的唯一标识符,用于区分不同的中断源。例如,键盘、硬盘等外设通过特定的IRQ号通知CPU需要处理的事件。

核心特性​:

  1. 硬件驱动​:由硬件中断控制器(如x86的8259A、ARM的GIC)分配和管理,不同设备的中断请求通过独立的IRQ线传输。
    • 传统x86架构中,IRQ号范围通常为0~15(如IRQ0对应系统计时器,IRQ1对应键盘);
    • 现代系统(如多核CPU)扩展了IRQ范围,支持更多设备。
  2. 资源复用​:由于物理中断线数量有限(如早期仅有16条),Linux等操作系统支持IRQ共享,允许多个设备共享同一IRQ号,通过dev_id区分具体中断源。
  3. 动态分配​:在支持即插即用(PNP)的系统中,IRQ号可动态分配给设备(如PCI设备),避免冲突。

示例​(传统x86系统):

IRQ号 对应设备
0 系统计时器
1 键盘
6 软盘控制器
14/15 主/从硬盘控制器

二、中断向量号(Interrupt Vector Number)

定义​:
中断向量号是CPU用于定位中断处理程序入口地址的索引值。每个中断号对应一个中断向量,指向内存中存储的中断服务程序(ISR)入口地址。

核心特性​:

  1. 地址映射​:在实模式下,中断向量号与物理地址直接关联。例如:
    • x86架构​:中断向量号N对应的入口地址为0x0000:N×4(4字节存储段地址和偏移量)。
    • ARM架构​:向量表地址由协处理器配置,如GIC中断控制器将硬件中断ID映射到向量号。
  2. 分类与用途​:
    • 异常处理​:向量号0~31保留给CPU内部异常(如除零错误、缺页异常);
    • 外设中断​:向量号32及以上用于硬件中断(如IRQ0映射到向量32);
    • 软中断​:向量号128等用于系统调用或自定义中断。
  3. 动态管理​:现代操作系统(如Linux)通过中断描述符表(IDT)动态分配向量号,支持多核负载均衡和热插拔。

示例​(x86系统部分向量号):

向量号 用途
0x00 除零错误
0x08 双故障(系统严重错误)
0x20 定时器中断(IRQ0)
0x80 Linux系统调用入口

三、IRQ与中断向量号的关系

  1. 硬件到逻辑的映射​:
    • IRQ是硬件层面的中断标识,而中断向量号是CPU逻辑层的中断索引。例如,IRQ1(键盘)可能映射到向量号0x21(十进制33)。
  2. 操作系统中介入​:
    • 在Linux中,中断控制器(如APIC)将硬件中断ID转换为IRQ号,再通过irq_desc结构关联到向量号和对应的ISR。
  3. 多核扩展​:
    • 多核系统中,同一IRQ号可路由到不同CPU核心,而向量号保持全局唯一性以实现中断分发。

四、总结对比

特性 硬件中断请求号(IRQ) 中断向量号
作用 标识外设的中断请求源 索引中断服务程序入口地址
分配方式 硬件中断控制器或动态分配(PNP) 操作系统通过中断向量表或IDT动态管理
范围 有限(如0~15传统x86)或扩展(现代系统上千) 0~255(x86实模式)或更大(保护模式)
硬件依赖 直接关联物理中断线 依赖CPU架构和内存管理机制

实际应用​:

  • 编写设备驱动时,需通过IRQ号注册中断处理函数,内核将其绑定到对应的向量号;
  • 调试中断冲突时,需检查/proc/interrupts文件中的IRQ分配情况。

如需进一步了解具体设备的IRQ映射或中断处理流程,可参考硬件手册或Linux内核文档。