Linux内核设计与实现——7 中断与中断处理(4)

来源:互联网 发布:唐朝乐队 知乎 编辑:程序博客网 时间:2024/05/16 19:55

4.上半部与下半部

1)为什么要分上下半部

速度与功能的博弈。上文已经提到中断处理程序是打断了别人的运行,所以要尽可能快地运行完毕。但是又想尽量完成强大的功能。这是两个互相矛盾的目标。解决办法就是把中断处理程序分成以下两部分

2

上半部:有严格的时间限制,做一些必须要马上进行的工作,例如对中断的应答和硬件复位

下半部:允许稍后完成,做一些不太紧急的工作,如数据的加工

这样,中断处理程序处理上半部,下半部再稍后空闲的时候再来执行,就能在速度与功能上达到一个平衡

3)举例:网卡的中断处理

网卡有数据到达,发一个中断给内核

内核调用中断处理程序处理以下工作:通知硬件、拷贝数据到内存。这些工作都是紧急的,以为网卡的缓存通常比较小,如果不及时拷出,缓存满后将造成丢包。而且必须让网卡复位,立即准备接收新数据。

而下半部的工作:对内存中数据进行加工,并发送给相应的进程。这是不太紧急的工作,可以稍后进行。

原创粉丝点击