在操作系统中,中断(Interrupt) 是 CPU 响应外部或内部事件的一种机制,分为 硬中断(Hard Interrupt) 和 软中断(Soft Interrupt),它们在触发方式、处理时机和应用场景上有显著区别。
1. 硬中断(Hard Interrupt)
定义
硬中断是由 硬件设备(如键盘、网卡、磁盘等)通过 中断请求线(IRQ) 向 CPU 发送的电信号触发的,要求 CPU 立即处理。
特点
- 硬件触发:由外部设备(如网卡收到数据包、键盘按键)或 CPU 异常(如除零错误、缺页)引发。
- 抢占式:CPU 会 立即暂停当前任务,保存上下文,并跳转到 中断服务程序(ISR, Interrupt Service Routine) 执行。
- 高优先级:硬中断的优先级通常高于普通进程,甚至可能屏蔽其他中断(如 Linux 的
IRQF_DISABLED标志)。 - 快速处理:ISR 通常只做 最紧急的操作(如读取网卡数据到缓冲区),后续处理交给软中断或内核线程。
示例
- 键盘输入:按下按键时,键盘控制器发送中断信号,CPU 立即读取按键码。
- 网卡收包:网卡收到数据包后触发中断,内核将数据拷贝到内核缓冲区(后续由软中断或
ksoftirqd处理)。
2. 软中断(Soft Interrupt)
定义
软中断是由 软件(内核代码)主动触发 的中断机制,用于延迟处理耗时任务或实现内核内部的异步操作。
特点
- 软件触发:通过内核 API(如
raise_softirq())主动发起,无硬件信号。 - 非抢占式:软中断不会立即执行,而是在 内核调度时机(如硬中断返回时、
ksoftirqd内核线程)处理。 - 可延迟:适合处理 耗时但非紧急 的任务(如网络协议栈处理、定时器回调)。
- 无优先级抢占:软中断运行时,一般不会被硬中断打断(除非显式允许)。
常见用途
- 网络协议栈:网卡硬中断只收包,后续 TCP/IP 解析由软中断完成。
- 定时器任务:如
jiffies更新、进程调度统计。 - 内核线程协作:如
ksoftirqd线程处理积压的软中断。
3. 关键区别
| 特性 | 硬中断 | 软中断 |
|---|---|---|
| 触发源 | 硬件设备(如网卡、键盘) | 内核代码(如 raise_softirq()) |
| 响应速度 | 立即抢占 CPU | 延迟执行(如中断返回时) |
| 处理上下文 | 中断上下文(不可睡眠) | 软中断上下文(不可睡眠) |
| 优先级 | 最高(可屏蔽其他中断) | 低于硬中断 |
| 典型应用 | 设备 I/O(如收包、键盘输入) | 协议栈处理、定时任务 |
4. 实际案例(Linux 网络收包)
- 硬中断:网卡收到数据包,触发中断,CPU 执行 ISR 将数据拷贝到内核缓冲区(
sk_buff)。 - 软中断:硬中断返回前,标记网络软中断(
NET_RX_SOFTIRQ),后续由ksoftirqd线程处理 TCP/IP 协议栈。 - 用户态:数据最终通过套接字传递给应用程序。
5. 相关问题
-
为什么需要软中断?
硬中断必须快速执行,耗时操作(如协议栈解析)交给软中断可减少中断屏蔽时间,提高系统响应能力。 -
软中断会阻塞吗?
不会。软中断仍在内核上下文运行,不能睡眠(与线程不同)。 -
如何查看系统中的软中断?
在 Linux 中可通过/proc/softirqs查看软中断统计:cat /proc/softirqs
总结
- 硬中断:硬件触发,立即响应,处理紧急任务(如设备 I/O)。
- 软中断:软件触发,延迟执行,处理耗时但非关键任务(如网络协议栈)。
两者协作平衡了实时性和系统吞吐量。
288

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



