2011-04-30 48 views
1

我在接受采访时被问到了这个问题。 为什么中断服务程序的下半部分不允许进入睡眠状态。我的回答是,由于中断在执行ISR时会被屏蔽,所以如果下半部分睡眠,我们将会错过一些中断。我无法想想别的。这是正确的答案。任何人都可以想到其他任何原因。和ISR的下半部分

+0

你有工作吗? – icedwater 2013-10-02 04:52:05

回答

3

以下是针对Linux的。

有两种类型的下半部分。第一个是由softirqs和tasklets组成的。 Tasklet基于softirqs构建,非常相似。这两个不会在流程上下文中运行,因此他们无法入睡。

第二种类型是workqueue,它在内核线程中运行并可以休眠。

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

也许你是在问两个原因无法入睡的上半部分。他们不是在流程环境中运行,因此他们不能,他们应该尽可能快地执行,并将所有工作都放在下半部分,如果需要的话,他们会睡觉。

相关问题