如果睡眠处于可中断状态,如何唤醒进程?

时间:2020-07-31 10:06:32

标签: linux linux-kernel signals scheduling preemption

如果内核代码正在等待某些任务发生,则可以显式地使其进入睡眠状态。现在,如果将任务置于TASK_INTERRUPTIBLE状态,则可以通过显式唤醒呼叫或通过接收信号来唤醒任务。

  1. 让我们说另一个进程向处于等待队列且处于TASK_INTERRUPTIBLE状态的进程发出信号,它将使该进程进入TASK_RUNNING,并且在调度该进程时将处理该信号下一个。这是正确的吗?
  2. 其他进程的显式唤醒调用也可以用来唤醒睡眠的进程。我想知道另一个条件如何使睡眠过程唤醒的条件成立?假设要完成磁盘I / O,因此该过程将进入休眠状态。另一个进程如何知道I / O已完成?还是由内核线程完成? 我想念什么?

1 个答案:

答案 0 :(得分:0)

  1. 由进入中断状态的代码来检测中断并在唤醒时采取适当的措施。这可能涉及当前正在处理用户操作的代码,并以-ERESTARTSYS错误完成该错误,该错误将在系统调用返回到用户模式之前被拦截并处理。

  2. 已经完成一些I / O的代码可以向其负责的队列发出“唤醒”,而无需关心队列中是否有任何要唤醒的任务,或者确切的条件任务正在等待。

    唤醒的任务需要决定要做什么,这可能包括如果未满足其等待的条件,则重复等待。