- 内核函数:事件驱动和时间驱动
- 相对时间和绝对时间
- 周期性产生的事件——都是由系统定时器驱动的。系统定时器是一种可编程硬件芯片,它能以固定频率产生中断,该中断就是所谓的定时器中断,它所对应的中断处理程序负责更新系统时间和执行需要周期性运行的任务。
内核的时间概念
- 内核必须在硬件的帮助下才能计算和管理时间。
- 节拍(tick):两次时钟中断的间隔时间。,它等于节拍率分之一
- 利用时间中断周期执行的工作:
- 更新系统运行时间
- 更新实际时间
- 在smp系统上,均衡调度程序中各处理器上的运行队列,如果运行队列负载不均衡的话,尽量使他们均衡
- 检查当前进程是否用尽了自己的时间片。如果用尽,就重新调度
- 运行超时的动态定时器
- 更新资源消耗和处理器时间的统计值
节拍率:HZ
- HZ:节拍率,一个周期为1/HZ秒。在X86体系结构中,默认是100,也就是每秒产生时钟中断100次。
- 理想的HZ值
提高节拍率会带来如下好处:提高时间驱动事件的解析度和准确度,会带来如下优点:
- 依赖定时器执行的系统调用,比如poll()和select(),能够以更高精度运行。
- 对资源消耗和系统运行时间等测量会更精细
- 提高进程抢占的准确度
高HZ的劣势:拍率越高,意味着时钟中断频率越高,意味着系统负担越重。
无节拍的OS:linux支持无节拍操作,按需动态调度时间中断,在系统空闲时减少能耗
- jiffies
全局变量jiffies记录自系统启动以来产生的节拍的总数。一秒钟内时钟中断的次数等于HZ,所以系统运行时间以秒为单位计算,=jiffies/HZ。
内核中将秒转换为jiffies用得多一些,内核本身很少用到绝对时间。
unsigned long later = jiffies+5*HZ; /*从现在开始5秒*/