一、jiffies基本概念
jiffies是linux内核中的全局变量,记录系统启动后的"时钟滴答"次数。
每当系统时钟中断发生,jiffies值就增加1。
它是内核测量时间的基本单位,类似于我们日常生活中的"秒"。
二、hz:jiffies的心跳频率
如果把jiffies比作心跳计数,那么hz就是心跳的频率。具体来说,hz定义了系统时钟每秒钟"心跳"的次数,也就是jiffies每秒钟增长的次数。
例如:如果hz=100,就像是心脏每秒跳动100次,那么每个jiffie就代表了1/100秒,即10毫秒。如果hz=1000,就像心脏每秒跳动1000次,那么每个jiffie就代表了1毫秒。
三、jiffies的特性
- 变量类型:声明为volatile,确保每次读取最新值
- 内存对齐:使用缓存行对齐减少多处理器系统的缓存冲突
- 初始值:不从0开始,而是从initial_jiffies(通常为300秒滴答数)开始
- 存储大小:32位系统时为无符号32位整数,64位系统时为无符号64位整数
四、jiffies溢出与时间比较
jiffies会周期性溢出,使得简单的大小比较不可靠。
内核提供了专门的比较函数处理溢出情况:
time_after(a,b)
:检查a是否在b之后time_before(a,b)
:检查a是否在b之前time_after_eq(a,b)
:检查a是否在b之后或等于btime_before_eq(a,b)
:检查a是否在b之前或等于b
这些函数通过将无符号差转为有符号数来处理溢出问题。
五、时间单位换算
jiffies与常用时间单位的换算关系:
- 1秒 = hz个jiffies
- 1毫秒 ≈ hz/1000个jiffies
内核提供了换算函数:
- msecs_to_jiffies():毫秒转jiffies
- jiffies_to_msecs():jiffies转毫秒
由于hz可能不是1000的倍数,换算过程可能有舍入误差。
总结
jiffies是linux内核时间管理的基础,尽管有精度限制,但其简单性和可靠性使它成为最常用的时间计数机制。理解jiffies的工作原理和最佳实践对内核和驱动开发至关重要。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论