参考回答:
1)低精度时钟
Linux 2.6.16之前,内核只支持低精度时钟,内核定时器的工作方式:
1、系统启动后,会读取时钟源设备(RTC, HPET,PIT…),初始化当前系统时间。
2、内核会根据HZ(系统定时器频率,节拍率)参数值,设置时钟事件设备,启动tick
(节拍)中断。HZ表示1秒种产生多少个时钟硬件中断,tick就表示连续两个中断的间
隔时间。
3、设置时钟事件设备后,时钟事件设备会定时产生一个tick中断,触发时钟中断处
理函数,更新系统时钟,并检测timer wheel,进行超时事件的处理。
在上面工作方式下,Linux 2.6.16 之前,内核软件定时器采用timer wheel多级时间
轮的实现机制,维护操作系统的所有定时事件。timer wheel的触发是基于系统tick
周期性中断。
所以说这之前,linux只能支持ms级别的时钟,随着时钟源硬件设备的精度提高和软
件高精度计时的需求,有了高精度时钟的内核设计。
2)高精度时钟
Linux 2.6.16 ,内核支持了高精度的时钟,内核采用新的定时器hrtimer,其实现逻辑和Linux 2.6.16 之前定时器逻辑
区别:
hrtimer采用红黑树进行高精度定时器的管理,而不是时间轮;
高精度时钟定时器不在依赖系统的tick中断,而是基于事件触发。
旧内核的定时器实现依赖于系统定时器硬件定期的tick,基于该tick,内核会扫描
timer wheel处理超时事件,会更新jiffies,wall time(墙上时间,现实时间)&