关于中断顶半部和底半部

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


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


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

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


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

猜你喜欢

转载自blog.csdn.net/shenjin_s/article/details/80428833