4.上半部与下半部
1)为什么要分上下半部
速度与功能的博弈。上文已经提到中断处理程序是打断了别人的运行,所以要尽可能快地运行完毕。但是又想尽量完成强大的功能。这是两个互相矛盾的目标。解决办法就是把中断处理程序分成以下两部分
2)
上半部:有严格的时间限制,做一些必须要马上进行的工作,例如对中断的应答和硬件复位
下半部:允许稍后完成,做一些不太紧急的工作,如数据的加工
这样,中断处理程序处理上半部,下半部再稍后空闲的时候再来执行,就能在速度与功能上达到一个平衡
3)举例:网卡的中断处理
网卡有数据到达,发一个中断给内核
内核调用中断处理程序处理以下工作:通知硬件、拷贝数据到内存。这些工作都是紧急的,以为网卡的缓存通常比较小,如果不及时拷出,缓存满后将造成丢包。而且必须让网卡复位,立即准备接收新数据。
而下半部的工作:对内存中数据进行加工,并发送给相应的进程。这是不太紧急的工作,可以稍后进行。