繁体   English   中英

linux中时序计算的参考是什么

[英]what is the reference for timing calculations in linux

我想澄清一下 linux 中的计时器,它们的行为如何? 我知道在微控制器中,我们使用引用的定时器/计数器,机器指令的时间来执行。所以我们可以让它循环多少时间我们需要睡眠/定时器/计数器。

但是在 linux 中,如果我使用 sleep(5),它会如何引用,正好 5 秒过去了。如果有人知道,请向我澄清。

每个操作系统内核(我知道的)都有一个独立于整个机器的定时器框架。 这几乎是内核必须拥有的最核心的东西之一,因为我们需要计时器来处理所有事情、进程调度、处理硬件错误、选择/轮询超时、网络协议等。在任何时候,您的内核都有几十个,如果不是在未来的某个时刻等待执行的数千个计时器。 它们中的大多数将被取消并且永远不会执行。

几乎每个人都使用的最简单的框架在机器中设置多个时钟之一以在设定的时间间隔生成中断。 100Hz 是最常见的,Windows(至少在过去)将其设置为 64Hz(但它可以被任何应用程序更改),一些系统尝试使用 1024Hz。 定时器中断触发,中断处理程序检查当时是否有任何事情排队等待执行,如果有,则执行。 Linux 已经做了一些工作来改进这一点,以便我们可以根据下一个预定的计时器获得比 10 毫秒更短或更长的间隔,以提高计时器的精度并节省电量,但​​总的来说,它的工作原理如上所述。

如果我正确理解您的问题,您会认为有某种东西可以测量特定指令序列需要多少时间,然后循环直到经过一段时间。 这是几乎从未做过的事情,因为它浪费电力并且同时阻止其他任何东西运行,而且非常不可靠。 它仍然在现代内核中完成,但很少并且只有在与非常非常愚蠢的硬件交谈时才需要高精度。 上一次我不得不这样做是在 17 年前与某个以太网控制器交谈时,您必须通过软件中的位敲击手动实现 MII,这很糟糕,每次您(un-)挂起系统很长时间插入以太网电缆。 没有人再制造需要它的硬件,因为它确实破坏了现代系统的性能。

因此,在您的问题中, sleep(5) 将通过在计时器框架中注册一个函数来实现,该函数将在 5 秒内调用,然后将进程置于睡眠状态。 5 秒后定时器触发,进程再次被唤醒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM