在一次采访中有人问我这个问题。 为什么中断服务程序的下半部分不允许进入睡眠状态?我的回答是,由于执行ISR时中断将被屏蔽,因此如果下半部分处于睡眠状态,我们将错过一些中断。别的什么。这是正确的答案。谁能想到其他任何原因。

有帮助吗?

解决方案

以下是针对Linux的。

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

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

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

也许您是在问两个无法入睡的前半部分。它们不是在流程上下文中运行,因此它们不能运行,因此应尽快执行,并将所有工作减半,如果需要,它们会休眠。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top