当前位置: 首页 > news >正文

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

一、硬件中断请求号(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)
0x80Linux系统调用入口

三、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内核文档。

http://www.xdnf.cn/news/391951.html

相关文章:

  • 英语复习笔记 1
  • Nipype使用:从安装配置到sMRI处理
  • 基于OpenCV的人脸识别:LBPH算法
  • MySQL数据库的安全性防护
  • 【问题】Watt加速github访问速度:好用[特殊字符]
  • 在 C++中,指针数组与数组指针的区别
  • 0基础 | L298N电机驱动模块 | 使用指南
  • 【基于 LangChain 的异步天气查询5】多轮对话天气智能助手
  • js的基本数据类型
  • opencascade.js stp vite 调试笔记
  • 使用 Java 反射动态加载和操作类
  • Ollama部署使用以及模型微调和本地部署
  • go语言对Cookie的支持
  • el-date-picker的type为daterange时仅对开始日期做限制
  • 【Java】线程实例化 线程状态 线程属性
  • AUTOSAR图解==>AUTOSAR_TR_HWTestManagementIntegrationGuide
  • REST/SOAP 协议介绍及开发示例
  • web animation API 锋利的css动画控制器 (更新中)
  • Python高级爬虫之JS逆向+安卓逆向2.1节: 网络爬虫核心原理
  • 【c++】【数据结构】二叉搜索树详解
  • InnoDB引擎
  • JVM规范之运行时数据区域
  • 【沉浸式求职学习day36】【初识Maven】
  • 低功耗蓝牙BLE之发射功率(mW/dBm)对应关系
  • jna总结1
  • 26考研——中央处理器_指令流水线_指令流水线的基本概念 流水线的基本实现(5)
  • 在C++中,符号位是否参与位运算
  • BUUCTF——Ezpop
  • [Java实战]Spring Boot 静态资源配置(十三)
  • Appium-OppoA92S-真机记坑