我很困惑,为什么中断处理程序无法入睡?我对同一个问题有2次观看: -
中断处理程序不可调度?因为它没有task_struct。
如果处理程序休眠,则系统可能会挂起,因为系统时钟中断被屏蔽,无法安排休眠过程。
中断处理程序是否可以安排,
但是优先级较低的系统时钟中断
被这些优先级较高的中断掩盖,
他们无法安排?
请给我一个很好的例子。
答案 0 :(得分:1)
您无法在Linux中的中断处理程序中睡眠,因为它们不受执行线程的支持。换句话说,它们不是可调度的实体。
大多数系统将中断处理分为两半,通常称为上半部分和下半部分。上半部分运行得非常快,中断(实际上是运行)中断发生时执行的任何操作 - 上半部分本身没有线程。因此,上半部分无法入睡,因为在睡眠完成时没有任何可以安排回来的事情。
答案 1 :(得分:0)
当发生中断时,处理器进入异常状态(中断上下文)。 发生这种情况时,调度程序将被禁用,直到处理器退出此状态。如果您将任务置于休眠状态,则任务进入等待队列并告诉调度程序将另一个任务出列。如果它发生在中断上下文中,则在我们完成此上下文之前没有调度程序,并且处理器挂起,因为我们从未完成中断。究竟发生了什么是处理器所依赖的。 一个解决方案是在线程中运行实际的中断代码 - 这称为线程中断,这是实时补丁中的一个配置,使linux“难以实时”