Skip to content

timer

时间在系统中非常重要,因为事件的调度都需要以时间为单位进行衡量。linux 中有时钟和时钟源的体系,具体并没有细看。

首先可以在编译的时候指定时钟频率,应该是全局的时钟频率,在系统初始化的时候,应该会对 apic 编程,让 apic 以这个频率触发中断,没触发一次时钟中断就让 jiffies 这个变量 + 1。因此基于 jiffies 可以做一些事件的调度,比如说想让某个事情在过n个单位处理,就可以设置一个变量 t = jiffies + n。然后每次都进行 jiffies 与 t 的比较,直到时间到了为止。

但是对于一些高性能的程序,我们并不希望每次过这一段时间就中断一下,不仅程序被打断,调度器触发的调度可能导致程序被调度到别的核上,导致性能的下降。因此 linux 有引入计时器机制和 dyntick 的概念,就是能让这个嘀嗒中断停一段时间,然后再恢复。jiffies 在这段时间内也可能也停止更新,等到再恢复的时候直接加上过去的一段时间跨度,恢复同步。