1

我在一次采访中被问到这个问题。为什么不允许中断服务程序的下半部分在其中休眠。我的回答是,由于在执行 ISR 时中断将被屏蔽,如果下半部分休眠,我们将错过一些中断。我无法思考其他任何事情。这是正确的答案吗?任何人都可以想到任何其他原因。

4

1 回答 1

3

以下是针对 Linux 的。

有两种类型的下半部分。第一个由softirqs和tasklet组成。Tasklet 建立在 softirq 之上,并且非常相似。这两个不在进程上下文中运行,因此它们无法睡眠。

第二种类型是工作队列,它在内核线程中运行并且可以休眠。

有一些下半部分必须睡觉。据我所知,网络系统使用工作队列。我写了下半部分的睡眠。

也许您在问无法入睡的上半部分,原因有两个。它们不在进程上下文中运行,因此它们不能并且它们应该尽可能快地执行并将所有工作推迟到下半部分,如果需要,它们会休眠。

于 2011-04-30T10:49:48.773 回答