1. 中断机制的本质与内核调度
计算机系统中存在两种截然不同的中断类型——硬件中断和软件中断,它们像两个性格迥异的交通警察,以不同方式指挥着CPU这个忙碌的工人。硬件中断就像突如其来的紧急电话,而软件中断则更像是事先安排好的工作会议。
硬件中断由外部设备触发,比如网卡收到数据包、磁盘完成IO操作或者定时器到期时,都会通过物理信号线向CPU发送中断请求。这种中断具有最高优先级,CPU必须立即保存当前状态去处理,就像消防警报响起时必须放下手头所有工作。现代系统中,硬件中断又可分为可屏蔽中断(如设备IO)和不可屏蔽中断(如硬件故障)。
软件中断则是通过特定指令(如x86的INT指令)主动触发的,更像是程序内部的函数调用机制。系统调用、异常处理和任务切换都依赖这种机制。与硬件中断不同,软件中断的执行时机是可知且可控的,处理器可以按预定计划处理它们。
关键区别:硬件中断异步发生且与指令执行无关,而软件中断同步发生且是指令执行的结果
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件中断的深度解析
2.1 硬件中断处理全流程
当硬件设备需要CPU注意时,会通过中断控制器(如APIC)发送信号。完整处理流程包括:
- 设备触发中断线电平变化
- 中断控制器仲裁优先级并通知CPU
- CPU完成当前指令后保存现场(EFLAGS、CS、EIP等)
- 根据中断号查找IDT表跳转到ISR
- ISR执行具体处理逻辑
- 发送EOI信号通知中断控制器
- 恢复现场继续原任务
以Linux内核为例,注册中断处理程序通过request_irq()实现:
c复制int request_irq(unsigned int irq, irq_handler_t handler,
unsigned long flags, const char *name, void *dev)
{
struct irqaction *action;
action = kmalloc(sizeof(struct irqaction), GFP_ATOMIC);
action->handler = handler;
action->flags = flags;
action->name = name;
action->de
