最近我在网上看到一个帖子,上面写着:
在现代内核中,快速中断和慢速中断之间的大部分差异已经消失。剩下的只有一个:快速中断(使用 SA_INTERRUPT 标志请求的中断)在当前处理器上禁用所有其他中断的情况下执行。请注意,其他处理器仍然可以处理中断,尽管您永远不会看到两个处理器同时处理相同的 IRQ。
在其他在线文档中,我发现在处理任何给定中断时,至少在上半部分处理程序中,所有其他中断都被禁用的语句。这似乎与上面的引用不一致。我对单 CPU 臂系统的上下文最感兴趣。有人能告诉我这些观点中哪一个是正确的吗?我应该补充一点,我问的是 2.6.10 内核,这是所涉及的处理器上可用的最新版本。
同样,有助于理解 Linux 中“屏蔽”和“禁用”中断之间的区别会有所帮助。根据我的研究,屏蔽似乎是在中断控制器(PIC)中完成的,而禁用可以由 CPU 完成。进一步增加我的困惑的是,Linux 功能disable_irq()
似乎与屏蔽有关,因此与中断控制器硬件有关,而不是在 ARM CPU 级别“禁用” disable_irq_nosync()
。enable_irq()
这个对吗?
最后,我在网上找到评论指出不能在上半部分中断处理程序中完成屏蔽。但是,如果是这种情况,是否意味着上面引用的函数调用不适合在 top-half 处理程序中使用?然而,我在网上看到了许多例子,展示了这些函数在上半部分处理程序中的使用。