Linux内核时钟系统和定时器实现

1. Linux内核时钟系统和定时器实现

Linux 2.6.16之前,内核只支持低精度时钟,内核定时器的工作方式:

  • 系统启动后,会读取时钟源设备(RTC, HPET,PIT…),初始化当前系统时间;
  • 内核会根据HZ(系统定时器频率,节拍率)参数值,设置时钟事件设备,启动tick(节拍)中断。HZ表示1秒种产生多少个时钟硬件中断,tick就表示连续两个中断的间隔时间。在我电脑上,HZ=250, 一个tick = 1/HZ, 所以默认一个tick为4ms。
    1
    2
    cat /boot/config-`uname -r` | grep 'CONFIG_HZ='
    CONFIG_HZ=250
  • 设置时钟事件设备后,时钟事件设备会定时产生一个tick中断,触发时钟中断处理函数,更新系统时钟,并检测timer wheel,进行超时事件的处理。