我只是对 sleep(time in ms)
是如何在 C 库中或基本上在操作系统级别实现的感兴趣...
我猜...
- 可能是基于您执行 nop 的 while 循环的处理器速度(我不确定 sleep 时间是否准确)...
- 处理器中的任何特殊寄存器,您可以在其中写入一些值,然后处理器会简单地暂停指定的时间(这将非常低效,因为处理器甚至无法运行其他程序)。
有什么线索吗?大概C库源码能解释一下吗?我不太关心“C”是如何实现它的……我只是想知道一般来说“sleep()”函数是如何实现的。
最佳答案
Sleep()
在操作系统级别实现。当任务/线程/进程正在休眠时,处理器不会旋转。该特定线程被放入待定队列(线程尚未准备好运行),直到时间到期,此时线程将被放入准备运行队列。
与此同时,其他准备运行的线程将运行。
只有当没有线程准备好运行时,操作系统才会进入空闲线程,这通常会发出指令以关闭(或无论如何置于低功耗状态)处理器,直到发生硬件中断。
只有对于一个非常简单的系统(比如最简单的嵌入式系统),Sleep()
可能实际上只是一个繁忙的等待循环。
任何操作系统教科书,例如"Modern Operating Systems" by Tanenbaum将详细介绍这一点 - 几乎所有这些(甚至是旧的、便宜的、用过的)。
关于c - 如何在操作系统级别实现 sleep ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1719071/