系统定时器能以可编程的频率中断处理器。此频率即为每秒的定时器节拍数,对应着内核变量HZ。
jiffies变量记录了系统启动以来,系统定时器已经触发的次数。
内核每秒中将jiffies变量增加HZ次。
HZ的值取决于体系架构。在x86系统上,在2.4内核中,该值默认设置为100;在2.6内核中,该值变为1000;而在2.6.13中,它又被降低到了250。在基于ARM的平台上,2.6内核将HZ设置为100。在目前的内核中,可以在编译时通过配置菜单选择一个HZ值。该项的默认值取决于系统架构的版本。
2.6.21内核支持无节拍的内核(CONFIG_NO_HZ),它会根据系统的负载动态触发定时器中断。无节拍系统暂不讨论。
根据上述内容可得:
秒数 = jiffies / Hz
jiffies相关的一些内容被定义在<linux/jiffies.h>中,但实际使用过程中只需要导入linux/sched.h>就可以了,sched.h包含了对jiffies.h的导入。
一些简单的使用:
jiffies + HZ; //未来一秒钟
jiffies + (n * HZ); //未来n秒
jiffies + (n * HZ / 1000); 未来n毫秒
假定jiffies的值是1000,,3位的jiffies会在大约50天的时间溢出。由于系统的运行时间可以比该时间长许多倍,因此,内核提供了另一个变量jiffies_64以存放64位(u64)的jiffies。连接器将jiffies_64的低32位于32位的jiffies指向同一个地址。在32位的机器上,为了将一个u64变量赋值给另