内核抢占是否可以在处于“TASK_INTERRUPTIBLE”状态的进程上下文中发生?

内核抢占是否可以在处于“TASK_INTERRUPTIBLE”状态的进程上下文中发生?

如果一个进程将自己设置为 的状态TASK_INTERRUPTIBLE,它是否可以被其他内核组件抢占?如果确实如此,我认为该进程可能由于未能检查唤醒条件而失去了唤醒机会。

答案1

状态TASK_INTERRUPTIBLE与任务调用调度程序时进入睡眠状态的方式有关:它的名称是“可中断睡眠”的缩写。它不控制抢占(事实上 LinuxTASK_INTERRUPTIBLE早在它被(可选地)抢占之前就已经控制了)。

抢占不是睡眠;从其 CPU 启动的执行任务是可运行的,而不是休眠的。

如果任务在其睡眠状态设置为TASK_INTERRUPTIBLE或其他睡眠类型时被抢占,则可能会陷入完全混乱。

早在 2003 年,就有人怀疑过与我认为您所怀疑的相同的事情,并将其发布在 LKML 邮件列表上:

http://lkml.org/lkml/2003/4/14/262

请参阅内核开发人员 Rob Love 的后续内容和剩余讨论。

任务TASK_INTERRUPTIBLE必须保留在抢占的运行队列中。实现这一目标的黑客行为(2003 年就已存在)已在上述主题中进行了讨论。

相关内容