linux的时钟中断需要两个全局变量,分别是xtime与jiffies。
linux的时钟中断的两个内核全局变量,分别是xtime与jiffies。
1、xtime
一个timeval结构类型变量,是从cmos电路(rtc)中取得的时间,一般是从某一历史时刻开始到现在的时间,也就是为了取得我们操作系统上显示的日期。这个就是“实时时钟”,它的精确度是微秒。获取方式是通过linux-2.6.0\linux-2.6.0\include\linux\time.h(低精度)头文件里面的do_gettimeofday函数获取。(从Linux内核获取时间函数do_gettimeofday)
struct timespec类型的结构体变量,定义见文件linux-2.6.0\linux-2.6.0\include\linux\time.h,其声明如下: struct timespec { __kernel_time_t tv_sec; /* 秒数 */ long tv_nsec; /* 纳秒数,1纳秒(ns)=1e-9秒(s) */ };
extern struct timespec xtime;
//1 纳秒=0.000001 毫秒
//1 纳秒=0.001 微秒
// 微秒,时间单位。一秒的一百万分之一,即1秒=10的6次方微秒。缩写为μs。
//1秒(s)=1000000微秒(μs)
//纳秒:原称毫微秒,就是10^(-9)秒(10亿分之一秒),即10^(-6)毫秒(1000000分之一毫秒)。1纳秒,等于1微秒的千分之一 //此结构体用于内核记录时间,其中字段tv_sec的单位是秒(s),表示整秒数,字段tv_nsec的单位是纳秒(ns),表示不足一秒的部分,在此其取值范围是0~999999999。
2、HZ(赫兹(Hz)是国际单位制中频率的单位,它是每秒中的周期性变动重复次数的计量)
Linux核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来保存每一秒有几次timer interrupts。如HZ为1000,代表每秒有1000次timer interrupts。
HZ可在编译核心时设定,可设定100、250、300或1000。核心版本预设值为250。
HZ这个值可以理解为操作系统的时钟频率,这个时钟的精度远低于硬件的时钟频率。如HZ设置为250,那么为一秒钟250次,每次为4ms,因此操作系统的时钟精度只能达到4ms。
3、Tick(节拍)
Tick是HZ的倒数,即系统计时器 interrupt每发生一次中断的时间(两次连续间隔)。如HZ为250时(linux2.5时设定值),tick为4ms(millisecond)。
[root@k3master ~]# cat /boot/config-`uname -r` | grep 'CONFIG_HZ=' CONFIG_HZ=1000 //这个就是内核hz //1秒内的中断的次数
4、Jiffies
在<linux/jiffies.h>,定义了Jiffies(unsigned long)这个变量。每发生一次timer interrupt,Jiffies变数会被加一。一秒内时钟中断的次数等于HZ,所以jiffies一秒内增加的值也就是HZ。
在 Linux 2.6 中,系统时钟每 1 ms中断一次(时钟频率,用 HZ 宏表示,定义为 1000,即每秒中断 1000 次,2.4 中定义为 100,很多应用程序也仍然沿用 100 的时钟频率),这个时间单位称为一个 jiffie。jiffies 与绝对时间之间的转换, 用两个宏来完成两种时间单位的互换:JIFFIES_TO_NS()、NS_TO_JIFFIES()。jiffies是记录着从电脑开机到现在总共的时钟中断次数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?