Linux内核驱动程序中的中断例程限制

时间:2012-07-02 07:59:51

标签: linux-kernel linux-device-driver

每个设备驱动程序书都谈到不使用在中断例程中休眠的函数。 从ISR调用这些函数会出现什么问题?

1 个答案:

答案 0 :(得分:2)

内核完全锁定是这里的问题。执行中断处理程序时内核处于中断上下文中,也就是说,中断处理程序与任何进程都没有关联(当前的宏不能使用)。

如果你能够睡觉,你将永远无法回到被打断的代码,因为调度程序不知道如何回到它。

在中断处理程序中保持锁定,然后休眠,允许另一个进程运行,然后再次进入中断处理程序并尝试重新获取锁定将使内核死锁。

如果您尝试阅读有关内核中的调度如何工作的更多信息,您很快就会意识到为什么在某些情况下睡眠是不行的。