0

当处理中断服务程序时,特定的 IRQ 线路被禁用,那么当注册在同一 IRQ 线路上的设备引发中断时会发生什么?该中断是否丢失或存储,以便以后处理。

请有人解释。

提前致谢。

4

2 回答 2

1

一般来说,中断会丢失。也就是说,除非设备驱动程序可以推断出发生了丢失的中断,例如通过定期检查与中断状态相关的设备寄存器。

许多(如果不是大多数)设备驱动程序不这样做。快速处理中断并从中断返回几乎总是更好,以便可以更快地处理下一个中断。

一个合理的目标是将代码路径 ISR 逻辑限制为少于十二行(最好甚至更少)的简单源代码行。这很容易通过服务任何需要服务的东西来实现:通常是从/到设备寄存器的一些传输,标记该 i/o 上的阻塞任务准备就绪,然后返回。当然,驱动程序的其余部分(非 ISR 部分)可能需要做更多的工作才能实现这种 ISR 效率,但恕我直言,这是很好的驱动程序设计。

我与许多设备驱动工程师讨论过,他们声称让 ISR 在现场做更多的工作(而不是推迟到基于线程的处理)可以帮助改善延迟和系统性能。我仍然不相信断言是真的。

于 2014-03-25T20:47:21.620 回答
0

在这里查看我的答案:在 x86 上,当操作系统禁用中断时,它们会消失,还是会排队并“等待”中断恢复?

该特定IRQ线路上的中断将丢失。因此,ISR例程应尽快执行,以免出现这种情况。这就是为什么我们转向上半部分、下半部分的方法(tasklet、工作队列),现在转向Threaded IRQs.

于 2014-03-26T02:28:36.717 回答