关闭

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

791人阅读 评论(0) 收藏 举报

4.上半部与下半部

1)为什么要分上下半部

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

2

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

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

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

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

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

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

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:784932次
    • 积分:4387
    • 等级:
    • 排名:第7265名
    • 原创:60篇
    • 转载:31篇
    • 译文:5篇
    • 评论:53条
    最新评论