0

最近我研究了 Robert Love 的 Linux-Kernel-Development。

有一段描述了softirq的机制。

softirq 处理程序在启用中断的情况下运行并且不能休眠。当处理程序运行时,当前处理器上的软中断被禁用。然而,另一个处理器可以执行其他软中断。

我不明白“当前处理器上的软中断已禁用”的含义。

这是否意味着在运行 __do_softirq 时,即使 softirq_pending 中的某些位再次升高,__do_softirq 函数也不能被中断?如果是,那么 __do_softirq 中的哪些语句会进行这种保护?

在跟踪__do_softirq中的代码时,我发现有一对__local_bh_disable和__local_bh_enable函数。

他们是否禁用本地软中断?

谢谢。

4

1 回答 1

1

是的,__local_bh_disable并且__local_bh_enable禁用和启用当前 CPU 上的软中断处理。Softirqs 也被称为“下半部分”,这就是这些名称中的“bh”所代表的含义。

于 2015-10-10T11:24:09.197 回答