中断

1. 中断(Interrupt)的定义

中断是计算机系统中一种关键机制,允许处理器暂停当前执行的任务,转去处理更高优先级的紧急事件,处理完成后恢复原任务。中断机制提高了系统的响应速度和资源利用率,是操作系统实现多任务、实时响应的基础。

2. 硬件中断(Hardware Interrupt) vs 软件中断(Software Interrupt)

特征 硬件中断 软件中断
触发源 外部硬件设备(如键盘、网卡、定时器) CPU执行特定指令(如int 0x80)或程序异常(如除零错误)
同步性 异步:随机发生,与CPU当前指令无关 同步:由正在执行的程序主动触发
目的 通知CPU外部事件(如数据到达、设备就绪) 请求系统服务(如系统调用)或处理程序错误
中断号(IRQ) 由硬件分配固定IRQ(如IRQ1对应键盘) 由软件指定(如Linux系统调用使用0x80中断号)
处理流程 1. 设备发送中断信号到中断控制器(如APIC)
2. CPU保存现场,跳转到中断处理程序
1. 执行int指令或触发异常
2. CPU直接查表跳转到处理程序
典型场景 网卡收到数据包、硬盘I/O完成、键盘输入 应用程序调用系统API(如读写文件)、除零错误
优先级 可配置优先级(如时钟中断 > 磁盘中断) 通常由操作系统定义(如异常 > 普通系统调用)
屏蔽能力 可通过屏蔽中断(CLI指令)临时禁用 不可屏蔽(如某些异常必须处理)

3. 硬件中断详解

  1. 触发过程
    • 设备通过物理信号线(如INTR、NMI)或消息信号(如MSI-X)通知中断控制器。
    • 中断控制器仲裁优先级后,向CPU发送中断请求。
  2. 处理步骤
    • CPU完成当前指令后,保存现场(寄存器、程序计数器)。
    • 根据中断号查询中断向量表,跳转到对应的中断服务程序(ISR)
    • ISR处理完成后,通过IRET指令恢复现场。
  3. 例子
    • 时钟中断:由定时器周期性触发,用于任务调度。
    • 网卡中断:数据包到达时触发,通知CPU读取数据。

4. 软件中断详解

  1. 触发方式
    • 主动调用:程序执行int n指令(如Linux系统调用int 0x80)。
    • 异常触发:CPU检测到错误(如缺页、除零),自动生成中断。
  2. 处理步骤
    • CPU直接根据中断号跳转到预设的处理程序(如系统调用处理函数或异常处理程序)。
    • 处理完成后可能终止程序(如段错误)或恢复执行(如缺页处理)。
  3. 例子
    • 系统调用:用户程序通过int 0x80进入内核态执行特权操作。
    • 断点调试:调试器利用int 3指令触发中断以暂停程序。

5. 关键区别总结

  1. 触发源
    • 硬件中断来自外部设备,软件中断来自CPU内部(指令或异常)。
  2. 同步性
    • 硬件中断是异步事件,软件中断是同步执行的必然结果。
  3. 用途
    • 硬件中断处理外部通信,软件中断实现系统服务或错误处理。
  4. 响应延迟
    • 硬件中断可能被屏蔽或延迟处理,软件中断通常立即响应。

6. 实际应用中的协同

  • 操作系统内核:混合使用两者。例如,网卡收到数据时触发硬件中断,内核处理数据后通过软件中断通知用户程序。
  • 性能权衡:高频硬件中断可能引入开销,因此现代网卡支持轮询模式中断合并(如NAPI)。