文章目录
一、中断的类型
1. 硬件中断(外部中断)
- 触发源:由外部设备(如键盘、硬盘、网卡)通过硬件信号通知CPU。
- 特点:
- 异步:发生时间不可预测(如用户按下键盘)。
- 可屏蔽:可通过设置中断屏蔽位暂时忽略(如处理关键代码时关闭中断)。
- 示例:
- I/O完成中断:硬盘读取完成时通知CPU处理数据。
- 时钟中断:定时器周期性触发,用于任务调度或超时检测。
2. 异常(内部中断)
- 触发源:CPU执行指令时检测到错误或特殊条件。
- 特点:
- 同步:由当前执行的指令直接引发。
- 不可屏蔽:必须立即处理(如除零错误、内存访问违规)。
- 分类:
- 故障(Fault):可修复的错误(如缺页异常,处理后可继续执行)。
- 陷阱(Trap):主动触发,用于系统调用(如
int 0x80触发内核服务)。 - 终止(Abort):严重错误(如硬件故障),导致进程终止。
3. 软中断(软件中断)
- 触发源:由程序主动发起(如系统调用)。
- 示例:
- 系统调用:用户程序通过
syscall指令陷入内核态。 - 调试断点:调试器通过软中断暂停程序执行。
- 系统调用:用户程序通过
二、中断处理流程
1. 中断触发
- 硬件设备或异常条件发送中断信号到CPU的中断控制器(如APIC、PIC)。
- 中断控制器根据优先级决定是否向CPU传递信号。
2. CPU响应
- 保存上下文:CPU暂停当前任务,将寄存器状态(如程序计数器、标志寄存器)压入栈。
- 关闭中断:部分场景需暂时屏蔽其他中断(通过
CLI指令)。
3. 执行中断处理程序(ISR)
- 查中断向量表(IDT):根据中断号(如IRQ编号)找到对应的处理函数。
- 运行ISR:
- 硬件中断:读取设备状态,处理数据(如将键盘输入存入缓冲区)。
- 异常:尝试修复错误(如缺页异常加载内存页)或终止进程。
- 系统调用:切换至内核态,执行服务例程(如读写文件)。
4. 恢复执行
- 恢复上下文:从栈中恢复寄存器状态。
- 开启中断:重新允许响应中断(通过
STI指令)。 - 继续执行:返回原任务或调度新任务(如时钟中断触发进程切换)。
三、关键概念
1. 中断优先级
- 多个中断同时发生时,高优先级中断优先处理(如时钟中断 > 键盘中断)。
- 优先级由中断控制器配置,避免低优先级任务阻塞系统。
2. 中断嵌套
- 允许高优先级中断打断正在处理的低优先级中断。
- 需谨慎处理栈空间和资源竞争(如避免死锁)。
3. 中断与轮询
- 中断驱动:事件触发响应,节省CPU资源(适合随机事件)。
- 轮询(Polling):CPU主动检查设备状态,简单但效率低(适合高频事件)。
4. 中断上下文
- 与进程上下文的区别:
- 中断处理程序运行在中断上下文,不能阻塞(如不可调用可能休眠的函数)。
- 进程上下文可切换调度(如系统调用处理)。
四、中断的实际应用
1. 设备驱动
- 网卡收到数据包后触发中断,CPU将数据从硬件缓冲区拷贝到内存。
2. 任务调度
- 时钟中断触发调度器,决定是否切换进程(如时间片耗尽)。
3. 系统调用
- 用户程序通过软中断(如
syscall)进入内核态,执行特权操作。
4. 错误处理
- 缺页异常触发页面加载,内存访问错误终止进程。
五、中断与线程中断的区别
| 特性 | 操作系统中断 | 线程中断(Java等) |
|---|---|---|
| 触发源 | 硬件或CPU异常 | 另一个线程调用interrupt() |
| 处理层级 | 底层硬件/内核 | 应用层代码协作 |
| 响应机制 | 强制暂停CPU当前任务 | 目标线程检查标志并决定是否退出 |
| 典型应用 | 设备I/O、异常处理、任务调度 | 协作式线程终止、取消任务 |
六、示例:键盘输入中断处理
- 用户按下键盘按键,键盘控制器发送中断信号。
- CPU保存当前寄存器状态,跳转到键盘中断处理程序。
- 程序从键盘缓冲区读取按键编码,转换为字符。
- 将字符存入输入队列,唤醒等待输入的进程。
- CPU恢复原任务继续执行。
1679

被折叠的 条评论
为什么被折叠?



