【问题标题】:Further clarification as to whether interuppts are disabled in top-half handler or not关于中断是否在上半部分处理程序中被禁用的进一步说明
【发布时间】:2012-12-01 00:02:46
【问题描述】:

最近我在一个在线帖子中看到了一条注释,内容如下:

在现代内核中,快速中断和慢速中断之间的大部分差异已经消失。剩下的只有一个:快速中断(使用 SA_INTERRUPT 标志请求的中断)在当前处理器上禁用所有其他中断的情况下执行。请注意,其他处理器仍然可以处理中断,尽管您永远不会看到两个处理器同时处理同一个 IRQ。

在其他在线文档中,我发现在处理任何给定中断时,至少在上半部分处理程序中,所有其他中断都被禁用。这似乎与上面的引用不一致。我对单 CPU 臂系统的上下文最感兴趣。有人能告诉我这些观点中哪一个是正确的吗?我应该补充一点,我在此询问的是 2.6.10 内核,这是相关处理器上可用的最新版本。

同样,有助于理解 Linux 中“屏蔽”和“禁用”中断之间的区别会有所帮助。根据我的研究,屏蔽似乎是在中断控制器(PIC)中完成的,而禁用可以由 CPU 完成。更让我困惑的是,Linux 函数disable_irq()disable_irq_nosync()enable_irq() 似乎与屏蔽有关,因此与中断控制器硬件有关,而不是在 ARM CPU 级别“禁用”。这是正确的吗?

最后,我在网上找到了 cmets,指出不能在上半部分中断处理程序中完成屏蔽。但是,如果是这种情况,是否意味着上面引用的函数调用不适合在 top-half 处理程序中使用?然而,我在网上看到了很多例子,展示了这些函数在 top-half 处理程序中的使用。

【问题讨论】:

    标签: linux-kernel interrupt interrupt-handling


    【解决方案1】:

    首先,您需要了解这个术语并不是具体的——一个群体称之为“A”,而另一些群体可能称之为“B”。

    一般说(并且对 ARM 等人知之甚少),术语“屏蔽”是在设置屏蔽某些中断(在位有效的基础上)时使用的) 同时让其他人启用。这种屏蔽自然倾向于以某种优先级顺序完成(低优先级的中断被阻塞,而高优先级的中断被处理),并且一些硬件平台在硬件中实现了一些优先级的东西。

    “禁用”,在这种情况下,往往是指阻塞所有中断,通常使用与屏蔽指令不同的指令。

    在许多系统中,操作顺序是在中断发生时立即禁用中断(硬件可能会自动执行此操作),快速保存最小状态,然后重新调整掩码并重新启用,同时处理最近的中断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      • 2016-03-08
      • 2017-04-20
      • 2020-09-10
      • 2018-03-15
      • 1970-01-01
      • 2021-01-19
      相关资源
      最近更新 更多