c - sleep 函数调用会导致哪种调度程序状态?

标签 c operating-system sleep scheduler unistd.h

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

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

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

在 RUNNING 状态下执行期间,它会遇到一个 sleep 语句,例如 sleep(10),它会使其 sleep 10 秒,或者直到收到信号或以较早者为准。

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

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

请告诉我这是如何工作的,或者我的问题是否有问题。谢谢

最佳答案

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

关于c - sleep 函数调用会导致哪种调度程序状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15399093/

相关文章:

c - 在 C 中使用字符串中的循环变量调用 system()

c - 将字符串数组从 C 返回到 Fortran

c - C中的函数重载

c - C 错误定义到字符串的优雅映射

vbscript - VBS - 如何暂停脚本直到按下某个键?

使用 IF 语句运行命令之前的 Powershell 操作系统检查

operating-system - 权限级别实现

linux - 设备的内存映射 IO 地址是否映射到进程的内核空间?

python - time.sleep 需要整数?

Java Swing 运行后重启定时器