0

我对 unistd.h 中声明的 sleep 函数有疑问

假设我们使用 CFS 调度程序。

我们有一个准备好运行的进程(我们称之为“READY”状态),它被选中运行,现在正在运行(所谓的“RUNNING”状态)。

在 RUNNING 状态下执行期间,它遇到了一个 sleep 语句,比如 sleep(10) ,它使它休眠 10 秒或直到信号被传递或以较早者为准。

现在,当 sleep(10) 正在执行时,进程是处于 READY 状态还是将其放回到 RUNNING 队列中的原始优先级,还是放入 WAIT 队列。

我无法想象正确的事件序列。一个思考过程表明它保留在 READY 队列中,而另一个想法是它被放入等待队列等待某种计时器到期。

请让我知道这将如何工作,或者我的问题是否有问题。谢谢

4

1 回答 1

1

我相信这取决于睡眠的持续时间,即如果等待很忙,那么它可以运行,如果等待很长,那么它将在等待队列中。此外,您应该能够通过将进程置于长时间睡眠并检查其状态来确认这一点。

于 2013-03-14T00:39:24.923 回答