当处理中断服务程序时,特定的 IRQ 线路被禁用,那么当注册在同一 IRQ 线路上的设备引发中断时会发生什么?该中断是否丢失或存储,以便以后处理。
请有人解释。
提前致谢。
当处理中断服务程序时,特定的 IRQ 线路被禁用,那么当注册在同一 IRQ 线路上的设备引发中断时会发生什么?该中断是否丢失或存储,以便以后处理。
请有人解释。
提前致谢。
一般来说,中断会丢失。也就是说,除非设备驱动程序可以推断出发生了丢失的中断,例如通过定期检查与中断状态相关的设备寄存器。
许多(如果不是大多数)设备驱动程序不这样做。快速处理中断并从中断返回几乎总是更好,以便可以更快地处理下一个中断。
一个合理的目标是将代码路径 ISR 逻辑限制为少于十二行(最好甚至更少)的简单源代码行。这很容易通过服务任何需要服务的东西来实现:通常是从/到设备寄存器的一些传输,标记该 i/o 上的阻塞任务准备就绪,然后返回。当然,驱动程序的其余部分(非 ISR 部分)可能需要做更多的工作才能实现这种 ISR 效率,但恕我直言,这是很好的驱动程序设计。
我与许多设备驱动工程师讨论过,他们声称让 ISR 在现场做更多的工作(而不是推迟到基于线程的处理)可以帮助改善延迟和系统性能。我仍然不相信断言是真的。
在这里查看我的答案:在 x86 上,当操作系统禁用中断时,它们会消失,还是会排队并“等待”中断恢复?
该特定IRQ
线路上的中断将丢失。因此,ISR
例程应尽快执行,以免出现这种情况。这就是为什么我们转向上半部分、下半部分的方法(tasklet、工作队列),现在转向Threaded IRQs
.