您的位置:首页 > 其它

定时器和时间管理

2008-12-22 17:24 211 查看
相对于事件驱动而言,内核中有大量的函数都是基于时间驱动的。

请注意相对时间和绝对时间之间的差别。相对时间绝对时间对内核时间管理来说都至关重要。

另外还要注意周期性产生的事件和推迟执行的事件之间的差别。

周期性产生的事件都是有系统定时器驱动的。系统定时器是一种可编程硬件芯片,它能以固定频率产生中断。该中断就是所谓的定时器中断,它所对应的中断处理程序负责更新系统时间,执行需要周期性运行的任务。

动态定时器,一种用来推迟执行程序的工具。内核可以动态创建或销毁动态定时器。

内核中的时间概念

内核必须在硬件的帮助下才能计算和管理时间。硬件为内核提供了一个系统定时器用以计算流逝的时间,该时钟在内核中可以看成是一个电子时间资源,比如数字时钟或处理器频率等。系统定时器以某种频率自行触发(经常被称为击中hitting或射中poping)时钟中断,该频率可以通过编程预定,称为节拍率tick rate。当时钟中断发生时,内核就通过一种特殊的中断处理程序对其进行处理。

因为预编的节拍率对内核来说是可知的,所以内核知道连续两次时钟中断的间隔时间。这个间隔时间就是节拍tick,它等于节拍率分之一(one over the tick rate)秒。内核就是靠这种已知的时钟中断间隔来计算墙上时间和系统运行时间。

墙上时间也就是实际时间,对用户空间来说是最重要的。内核通过控制时钟中断维护实际时间,另外内核也为用户空间提供了一组系统调用以获取实际日期和实际时间。

系统运行时间就是自系统启动开始所经历过的时间,对用户空间和内核都很有用。许多程序都必须清楚流逝过的时间。通过两次读取运行时间再计算他们的差,就可以得到相对的流逝过的时间。

时钟中断对于管理操作系统尤为重要,利用时钟中断周期执行的工作有:

更新系统运行时间

更新实际时间

在smp系统上,均衡调度程序中各处理器上的运行队列。如果运行队列负载不均衡,尽量使其均衡。

检查当前进程是否用尽了自己的时间片。如果用尽,就重新调度

运行超时的动态定时器

更新资源消耗和处理器时间的统计值

其中有些工作在每次的时钟中断处理程序中都要被处理,另一些是周期性的执行,只需要每n次时钟中断运行一次。

节拍率:HZ

系统定时器频率(节拍率)是通过静态预处理定义的,也就是HZ赫兹,在系统启动时按Hz值对硬件进行设置。

在<Param.h(include/asm-i386)>中

#ifdef __KERNEL__

# define HZ CONFIG_HZ /* Internal kernel timer frequency */

# define USER_HZ 100 /* .. some user interfaces are in "ticks" */

# define CLOCKS_PER_SEC (USER_HZ) /* like times() */

#endif

#ifndef HZ

#define HZ 100

#endif

写内核代码时不要认为HZ值是一个固定不变的值。大多数系统结构的节拍率都是可调的。

理想的HZ值

在linux问世以来,i386体系结构中的中断频率就设为100Hz,但是在2.5版本内核中,被提高到了1000Hz。

更高的时钟中断频度和更到的准确度带来如下优点:

内核定时器能以更改的准确度和频度运行

依赖定时器值执行的系统调用,比如poll()和select(),能够以更高的精度运行

对诸如资源消耗和系统运行时间等的测量会有更精细的解析度

提高进程抢占的准确度

缺点:

节拍频率越高,意味着时钟中断频率越高,系统负担越重。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: