1. 中断的本质与硬件基础
中断是现代计算机系统中最为核心的机制之一。想象一下你正在专心工作,突然电话铃声响起——这时你需要暂时放下手头工作去接听电话,处理完毕后再回到原来的任务。计算机中的中断机制与这个场景高度相似。
从硬件层面来看,中断信号通常由以下三类设备产生:
- 外部设备中断:键盘敲击、鼠标移动、网卡数据到达等I/O事件
- 内部异常:除零错误、缺页异常、非法指令等CPU执行异常
- 软件中断:系统调用(如Linux的int 0x80)、调试断点等程序主动触发
以x86架构为例,CPU通过两个关键组件管理中断:
- 可编程中断控制器(PIC):负责接收硬件中断请求(IRQ),按优先级排序后发送给CPU
- 中断描述符表(IDT):包含256个中断门描述符,每个描述符指向对应的处理程序
提示:现代操作系统通常使用APIC(高级可编程中断控制器)替代传统PIC,支持多核处理器和更复杂的中断路由。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 中断触发全流程解析
当中断事件发生时,完整的处理流程可分为以下六个阶段:
2.1 中断触发阶段
设备通过物理线路(如IRQ线)或消息信号(如MSI)向中断控制器发送电信号。以键盘中断为例:
- 按键按下产生扫描码
- 键盘控制器将扫描码存入I/O端口
- 触发IRQ1中断线
2.2 中断响应阶段
CPU在每个指令周期末尾检查中断引脚,当检测到有效信号时:
- 完成当前指令的执行
- 保存当前EFLAGS、CS、EIP寄存器到内核栈
- 关闭中断使能标志(IF),防止嵌套中断
2.3 中断向量获取
CPU从中断控制器获取中断向量号。在传统PIC架构中:
code复制IRQ0 → 向量0x08 (定时器中断)
IRQ1 → 向量0x09 (键盘中断)
...
IRQ15 → 向量0x77
2.4 中断处理程序查找
CPU通过IDTR寄存器找到IDT基地址,加上向量号×8得到门描述符。描述符包含:
- 段选择子:指向内核代码段
- 偏移地址:中断处理程序的入口点
- 类型字段:区分中断门、陷阱门等
2.5 上下文切换
CPU切换到内核模式,主要操作包括:
- 从用户栈切换到内核栈
- 保存用户态SS、ESP寄存器
- 加载内核代码段选择子
- 跳转到处理程序入
