linux - 将 jiffies 转换为毫秒

标签 linux linux-kernel

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

最佳答案

正如前面的回答所说,jiffies 递增的速率是固定的。

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

这是 Hertz 的缩写,即每秒的滴答数。在计时器刻度设置为 1 毫秒的系统上,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 毫秒计时器滴答的系统上,HZ/100 为 1,并且精度开始受到影响。您可能会在 0.0001 和 1.999 计时器滴答之间(基本上是 0-2 毫秒)之间得到延迟。如果您尝试在 10ms 滴答系统上使用 HZ/200,整数除法会给您 0 jiffies!

所以经验法则是,对于微小的值(接近 1 jiffie 的值)使用 HZ 时要非常小心。

要换一种方式,你可以使用:

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

你不应该期望比毫秒精度更好。

关于linux - 将 jiffies 转换为毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2731463/

相关文章:

linux - 用于在 Linux 中的所有子文件夹中使用正确的日期格式重命名文件名的 Bash 脚本

linux - 如何显示netfilter hooks中注册了多少函数?

linux - 等待队列与 Linux 中的信号量

linux - 有没有一种方法/工具可以在 Linux 下列出标记为 "thin"的 TCP 连接?

linux - 使用 sigprocmask 设置掩码仅取决于调用位置

linux - 通过 TCP 连接创建 VPN

linux - CloudCompare 无法启动,错误为 : "QXcbConnection: Could not connect to display :0"

linux - 从 2.9x 升级 GCC

linux - SO_TIMESTAMP 和 SO_TIMESTAMPING 软件时间戳的区别

memory - 将大量二进制数据从 u-boot 传递到 linux 内核