我正在阅读 Robert Love 的“Linux 内核开发第三版”,以大致了解 Linux 内核的工作原理..(2.6.2.3)
我对等待队列的工作方式感到困惑,例如这段代码:
/* ‘q’ is the wait queue we wish to sleep on */
DEFINE_WAIT(wait);
add_wait_queue(q, &wait);
while (!condition) { /* condition is the event that we are waiting for */
prepare_to_wait(&q, &wait, TASK_INTERRUPTIBLE);
if (signal_pending(current))
/* handle signal */
schedule();
}
finish_wait(&q, &wait);
我想知道哪个进程正在运行这段代码?它是内核线程吗?这是谁的处理时间?
同样在循环中,当条件仍然不满足时,我们将继续睡眠并调用调度来运行另一个进程,问题是我们什么时候回到这个循环?
这本书说,当一个进程休眠时,它会从我们的运行队列中删除,否则它会被唤醒并且必须进入一个繁忙的循环......
- 还说:“睡眠应该始终在一个循环中处理,以确保任务等待的条件确实已经发生。”
我只想知道这个循环在什么上下文中运行?
对不起,如果这是一个愚蠢的问题。我只是很难看到大图