我在接受采访时被问到这个问题。 为什么不允许中断服务程序的下半部分进入休眠状态。我的回答是,由于在执行ISR时中断将被屏蔽,如果下半部分有睡眠,我们将错过一些中断。我无法思考其他任何事情。这是正确的答案。任何人都可以想到任何其他原因。
答案 0 :(得分:3)
以下内容适用于Linux。
有两种类型的下半部分。第一个由softirqs和tasklet组成。 Tasklet基于softirqs构建,非常相似。这两个不在进程上下文中运行,因此无法入睡。
第二种类型是workqueue,它在内核线程中运行并且可以休眠。
有些下半部分需要睡觉。据我所知,网络系统使用工作队列。我写了下半部睡觉。
也许你在问两个原因无法入睡的上半部分。它们不是在进程上下文中运行,因此它们不能并且它们应该尽可能快地执行,并且将所有工作都降低到下半部分,如果需要,它们将会睡觉。