在linux操作系统中,中断是 cpu 对外设或内部事件作出快速响应的核心机制。简单来说,中断就是让 cpu 暂时停下正在执行的任务,转去处理更紧急的事情,处理完再回来继续原来的工作。这种机制避免了 cpu 不断轮询设备状态造成的资源浪费。

中断的基本定义
linux中什么是中断?从技术角度看,中断是由硬件或软件产生的异步信号,用于通知 cpu 有事件需要处理。硬件中断通常来自键盘、网卡、磁盘等设备;软件中断则可由程序通过指令主动触发,比如系统调用使用的软中断。
中断的主要分类
- 硬件中断:由外设通过中断控制器发给 cpu,分为可屏蔽和不可屏蔽中断。
- 软件中断:由执行中的程序触发,常用于实现系统调用或模拟硬件行为。
- 下半部机制:如 tasklet 和 workqueue,用来延迟处理非紧急的中断工作。
中断在 linux 内核中的处理流程
当 cpu 收到中断信号,会根据中断号查找中断描述符表,跳转到注册的中断处理函数。处理函数应尽量短小,把耗时任务放到下半部。下面是一段简化的内核模块中断注册示例:
#include <linux/module.h>
#include <linux/interrupt.h>
// 中断处理函数
irqreturn_t my_irq_handler(int irq, void *dev_id) {
// 处理紧急逻辑
return IRQ_HANDLED;
}
// 模块初始化时申请中断
static int __init my_init(void) {
// 假设中断号为 17,名称为 my_irq
request_irq(17, my_irq_handler, IRQF_SHARED, "my_irq", NULL);
return 0;
}
static void __exit my_exit(void) {
free_irq(17, NULL);
}
module_init(my_init);
module_exit(my_exit);
中断与轮询的对比
| 方式 | cpu占用 | 响应速度 | 适用场景 |
|---|---|---|---|
| 轮询 | 高 | 慢 | 简单设备调试 |
| 中断 | 低 | 快 | 大多数外设 |
为什么理解中断很重要
掌握 linux 中什么是中断,有助于分析系统负载异常、设备无响应等故障。比如网卡丢包可能是中断不均衡,磁盘卡顿可能和中断亲和性有关。通过 cat /proc/interrupts 可以查看各类中断的分布情况。
中断让 cpu 从被动等待变为主动响应,是 linux 高效处理并发事件的基石。
查看中断数的命令示例
# 查看当前系统的中断统计 cat /proc/interrupts
总之,中断是 linux 系统不可或缺的机制,理解其概念和处理方式,对系统优化和驱动开发都有实际价值。