c - 如何在操作系统级别实现 sleep ?

标签 c operating-system sleep

我只是对 sleep(time in ms) 是如何在 C 库中或基本上在操作系统级别实现的感兴趣...

我猜...

  1. 可能是基于您执行 nop 的 while 循环的处理器速度(我不确定 sleep 时间是否准确)...
  2. 处理器中的任何特殊寄存器,您可以在其中写入一些值,然后处理器会简单地暂停指定的时间(这将非常低效,因为处理器甚至无法运行其他程序)。

有什么线索吗?大概C库源码能解释一下吗?我不太关心“C”是如何实现它的……我只是想知道一般来说“sleep()”函数是如何实现的。

最佳答案

Sleep() 在操作系统级别实现。当任务/线程/进程正在休眠时,处理器不会旋转。该特定线程被放入待定队列(线程尚未准备好运行),直到时间到期,此时线程将被放入准备运行队列。

与此同时,其他准备运行的线程将运行。

只有当没有线程准备好运行时,操作系统才会进入空闲线程,这通常会发出指令以关闭(或无论如何置于低功耗状态)处理器,直到发生硬件中断。

只有对于一个非常简单的系统(比如最简单的嵌入式系统),Sleep() 可能实际上只是一个繁忙的等待循环。

任何操作系统教科书,例如"Modern Operating Systems" by Tanenbaum将详细介绍这一点 - 几乎所有这些(甚至是旧的、便宜的、用过的)。

关于c - 如何在操作系统级别实现 sleep ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1719071/

相关文章:

c - WriteFile 函数 - 写入串口

c - kevent 何时何地可能会返回错误?

c - 在 C 中始终为静态函数提供函数原型(prototype)是一种好习惯吗?

windows - Powershell 获取所有光驱盘符

c - 为什么 stackoverflow 错误乱七八糟?

Unix Shell 脚本 : sleep command not working

c - 使用结构在C中解析数据包

sockets - 如何自动测试网络 (TCP/IP) 应用程序?

java - 甚至可以让这个循环每次等待几秒钟吗?

c++ - 让一个 boost 线程休眠几纳秒