一尘不染

将jiffies转换为毫秒

linux

如何在Linux中手动将抖动转换为毫秒,反之亦然?我知道内核2.6具有此功能,但是我正在研究2.4(家庭作业),尽管我看了一下代码,但它使用了许多宏常量,我不知道它们是否在2.4中定义。


阅读 873

收藏
2020-06-03

共1个答案

一尘不染

如先前的回答所述,jiffies增量的速率是固定的。

为接受的函数指定时间的标准方法jiffies是使用常数HZ

那是Hertz的缩写,或每秒的刻度数。在计时器滴答设置为1ms的系统上,HZ = 1000。一些发行版或体系结构可能使用另一个数字(以前是100)。

指定jiffies函数计数的标准方法是使用HZ,如下所示:

schedule_timeout(HZ / 10);  /* Timeout after 1/10 second */

在最简单的情况下,这可以正常工作。

2*HZ     /* 2 seconds in jiffies */
HZ       /* 1 second in jiffies */
foo * HZ /* foo seconds in jiffies */
HZ/10    /* 100 milliseconds in jiffies */
HZ/100   /* 10 milliseconds in jiffies */
bar*HZ/1000 /* bar milliseconds in jiffies */

最后两个有一个问题,但是,在具有10
ms计时器滴答的系统上,该HZ/100值为1,并且精度开始受到影响。您可能会在0.0001到1.999之间的任何时间间隔内获得延迟(本质上是0-2毫秒)。如果您尝试HZ/200在10ms的滴答系统上使用,则整数除法会给您0个捷夫!

因此,经验法则是,请小心使用HZ来获取微小值(接近1个吉菲)。

要进行另一种转换,可以使用:

jiffies / HZ          /* jiffies to seconds */
jiffies * 1000 / HZ   /* jiffies to milliseconds */

您不应该期望比毫秒精度更好的东西。

2020-06-03