我对unistd.h中声明的睡眠函数有疑问
假设我们使用CFS调度程序。
我们有一个准备运行的进程(让我们称之为“READY”状态),它被选中运行,现在正在运行(所谓的“RUNNING”状态)。
在RUNNING状态下执行它会遇到一个睡眠声明,比如睡眠(10)让它睡10秒或者直到信号被传递或者更快。
现在正在执行sleep(10)时,进程是处于READY状态还是在RUNNING队列中重新置于其原始优先级,还是处于WAIT队列中。
我无法可视化正确的事件序列。一个思考过程表明它仍然在READY队列中,而另一个想法是它放入WAIT队列等待某些时间的定时器到期。
请告诉我这是如何运作的,或者我的问题是否有问题。感谢
答案 0 :(得分:1)
我认为这取决于睡眠的持续时间,即,如果等待是忙,那么它可以正在运行,如果等待很长,那么它将在等待队列中。此外,您应该能够通过将进程置于长时间睡眠状态并检查其状态来确认这一点。