硬件timer
Timer在硬件上是一个非常简单的东西(这里不考虑虚拟化,安全相关的问题),一般来说timer都会支持两种模式,一是periodic模式和free running模式,前者周期性的产生中断,后者一直往前累加到配置的最大值,报一次中断,称为one shot。
软件抽象
软件上将timer抽象成clocksource和clockevent,从名字大概就猜得出来,clocksource是提供时间信息的,如当前的系统时间;而clockevent是提供事件信息的,就是在未来某个时间点提醒CPU某个事件需要处理了,比如定时器超时了,或者一个新的tick的到来。
TICK
现代操作系统基本都是分时操作系统,也就是说多任务分时共享CPU,而分时的基础就是timer,所以timer驱动是操作系统基础架构性质的驱动,从timer的角度去理解操作系统,会对操作系统有一个更加宏观和具体化的认识。
Timer之所以可以让多进城轮动起来,是因为它会周期性的产生中断,如CONFIG_HZ配置为250,意味着每4毫秒产生一次中断,而每次中断来的时候jiffs会增加一,所以jiffs是一个内核里面很重要的计时单位。在中断处理函数里面判断当前进程的时间片是否用完,如果用完的话就选择另外一个进程,这是分时复用最核心的逻辑。
CONFIG_HZ并不是越大越好,也不是越小越好,如果CONFIG_HZ太大,会导致频繁的产生中断,中断的软件栈会消耗过多的CPU资源,如果