关于中断顶半部和底半部

在中断处理过程中需要考虑怎样在处理例程内完成耗时的任务。
一般来说,中断需要完成一定数量的工作,但中断处理例程又需要尽快结束而不能使中断阻塞的时间过长。这两个需求是相互矛盾的,怎么解决?Linux 给出了答案。
Linux(连同很多其他系统)通过将中断处理例程分成两个部分来解决这个问题。


顶半部:是实际响应中断的例程,也就是用request_irq注册的中断例程,一般这个部分只会置起处理中断所需要的一些 flags, 然后退出。


底半部:是一个被顶半部调度,并在稍后更安全的时间内执行的例程。
底半部通过获取顶半部置起的 flags,完成实际的处理工作。

顶半部和底半部最大的不同,就是当底半部执行的时候所有的中断都是打开的—这就是所谓的跟安全的时间内运行。(执行底半部时,Linux是可以响应其他中断的,而顶半部是不可以的)


典型的情况是,顶半部保存设备的数据到一个设备特定的缓冲区并调度它的底半部,然后退出:这个操作是非常快的。然后底半部执行其他必要的工作,例如唤醒进程、启动另外的I/O操作等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值