Linux将中断处理分为了2个阶段:
1.上半部直接处理硬件请求(硬中断),快速处理中断,主要处理跟硬件相关或是时间敏感的工作。
2.下半部则是内核触发(软中断)用来延迟处理上半部未完成的任务,通常以内核线程的方式运行。
这里可以用取外卖举个例子:
上半部分:接听电话,沟通送餐地址,发票或者其他事情等见面再说。
下半部分:取外卖、处理发票等事情。
查看软中断和内核线程
查看各种类型的软中断在cpu上的运行次数
$ cat /proc/softirqs CPU0 CPU1 HI: 0 0 TIMER: 811613 1972736 NET_TX: 49 7 NET_RX: 1136736 1506885 BLOCK: 0 0 IRQ_POLL: 0 0 TASKLET: 304787 3691 SCHED: 689718 1897539 HRTIMER: 0 0 RCU: 1330771 1354737
软中断是以内核线程的方式运行的,每个cpu会对应一个软中断内核线程,这个软中断内核线程叫做ksoftirqd/CPU编号:
ps aux | grep softirq root 7 0.0 0.0 0 0 ? S Oct10 0:01 [ksoftirqd/0] root 16 0.0 0.0 0 0 ? S Oct10 0:01 [ksoftirqd/1]
ps的输出中,名字在中括号里的,一般都是内核线程。