jiffies
时钟
Linux的时钟中断中,涉及两个全局变量,一个是xtime。xtime是从cmos电路中取得的时间,一般是从某一历史时刻开始到现在的时间也就是为了取得我们操作系统上显示的日期。这个就是所谓的“实时时钟”,它的精确度是微秒它是timeval数据结构变量:
1 |
|
另一个是jiffies。jiffies是记录着从电脑开机到现在总共的时钟中断次数。在linux内核中jiffies远比xtime重要,那么他取决于系统的频率,LINUX系统时钟频率是一个常数HZ来决定的,HZ是可配置的
HZ和jiffies
HZ是每秒钟产生的时钟中断的个数,那么jiffies每秒钟就增加HZ大小的值。系统中的中断个数,也叫tick数,jiffies保存的就是总tick数
jiffies每增加HZ个tick,时间就过去1s
jiffies的定义如下:
1 |
|
根据定义可以看出,jiffies和jiffies_64共用同一块内存,相比于jiffies_64,jiffies会在前端空出4个字节大小
jiffies溢出
jiffies的类型为unsigned long,所以总会有溢出的时候,当jiffies溢出时就会发生回绕,从0开始重新计数
当发生回绕时,时间计算容易出现问题,所以内核提供了一些宏来判断时间:
1 |
|
关于为什么强转成long能解决这个问题,可以参考time_after方法对jiffies回绕问题的解决
为了能尽早的发现jiffies的溢出是否对系统造成影响,jiffies在初始化时,不是从零开始的,而是初始化为距离溢出还有5分钟的tick数
jiffies
https://carl-5535.github.io/2022/04/25/工作总结/jiffies/