2

最近我在网上看到一个帖子,上面写着:

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

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

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

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

4

1 回答 1

2

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

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

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

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

于 2012-12-01T01:46:10.987 回答