我“由罗伯特·爱的Linux内核开发第3版”,以获取有关Linux内核是如何工作的总体思路阅读。(2.6.2.3)Linux内核 - 等待队列
我感到困惑如何等待队列例如工作验证码:
/* ‘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);
我想知道哪些进程正在运行该代码?它是一个内核线程?其处理时间是这样的?
以及在循环,而病情依然没有得到满足,我们将继续睡觉,并呼吁时间表运行另一个程序问题是当我们回到这个循环?
书中说,当一个进程睡眠,它是从我们的运行队列中删除,否则会被唤醒,并已经进入一个繁忙的循环......
- 还说:“睡觉应始终处理一个确保任务等待的条件确实已经发生的循环。“
我只是想在这篇循环运行的情况下知道的吗?
对不起,如果这是一个愚蠢的问题。我只是无法看到的大图
欢迎来到SO!伟大的第一个答案 –
谢谢,@BrianCain! –
这不是调度程序的一部分(您可以看到它是_calling_ schedule()),它正在将自己置于睡眠状态。这是一个标准的代码,等待一个wait_queue,直到满足一个条件,这样它的标准被封装在wait_event()中。这比内核抢占要早。 –