1. 中断处理机制概述
中断是现代计算机系统中实现异步事件处理的核心机制。当硬件设备需要CPU处理时,它会通过中断控制器向CPU发送中断信号,打断当前执行流程,转而执行预先定义的中断服务程序(ISR)。Linux内核作为操作系统核心,需要高效管理各种硬件中断,确保系统响应性和稳定性。
在x86架构中,中断可分为三类:
- 硬件中断:由外部设备触发,如网卡收到数据包
- 异常:由CPU执行指令时触发,如除零错误
- 软中断:由软件主动调用,如系统调用
关键点:现代服务器每秒可能处理数十万次中断,内核的中断处理效率直接影响系统整体性能。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件层面的中断触发
2.1 中断控制器工作原理
以常见的APIC(高级可编程中断控制器)为例:
- 设备通过物理线路连接到IOAPIC
- IOAPIC将中断信号转换为中断消息
- 中断消息通过系统总线传递给CPU的本地APIC
- 本地APIC根据优先级决定是否立即处理
典型的中断触发流程:
bash复制设备 -> IOAPIC -> 系统总线 -> 本地APIC -> CPU核心
2.2 中断描述符表(IDT)
CPU通过IDT查找中断处理程序:
- 每个中断向量对应一个门描述符
- 包含中断处理程序的入口地址和特权级
- Linux在启动时初始化IDT
示例代码片段(arch/x86/kernel/idt.c):
c复制void __init idt_setup_early_traps(void)
{
idt_setup_from_table(idt_table, early_idts, ARRAY_SIZE(early_idts), true);
load_idt(&idt_descr);
}
3. 内核中的中断处理流程
3.1 上半部与下半部机制
Linux将中断处理分为两部分:
-
上半部(top half):
- 在中断上下文中立即执行
- 只做最紧急的处理
- 执行时禁止同级中断
-
下半部(bottom half):
- 通过软中断、tasklet或工作队列实现
- 可以执行较耗时的操作
- 允许被其他中断打断
3.2 中断服务程序注册
设备
