您的位置:首页 > 运维架构 > Linux

linux 内核学习之—定时器和时间管理

2014-06-13 10:34 337 查看
1.概述

目的:

内核中存在大量基于事件驱动的函数,为满足这些函数定期(周期)性执行的需要—即为此类函数提供时间;
管理系统的运行时间以及当前日期和时间的管理—提供绝对时间和相对时间.

核心:
系统定时器和时钟中断处理程序是linux系统内核管理机制的中枢。
2 基本概念
系统定时器:一种可编程硬件芯片,用于帮助内核计算和管理时间,能以固定频率自发产生定时器中断,对应的中断处理程序负责更新系统时间及执行需要周期性的任务。
节拍率:系统定时器自行触发时钟中断的频率,即系统定时器默认频率,通过编程(内核<asm/param.h中>)预定,单位为HZ,多数情况下默认为1000HZ(该值可调, 2.5版本以后的版本为1000HZ,windows i386中配置为100HZ),即1ms产生一次时钟中断。
动态定时器:也称内核定时器或者定时器,内核中用于管理系统运行时间,个人认为可理解为:可设置某个动作延时到某个指定时间点再执行的软件机制。ps:通常定时器在超时后马上就会执行,但也有可能推迟到下一次时钟节拍时才能执行,所以不能用定时器来实现任何硬定时任务。
实时时钟(RTC):用来持久存放系统时间的设备,系统关闭后,靠主板上的微型电池供电以保持系统计时.
节拍:连续两次时钟中断的间隔时间,等于节拍率分之一。

系统运行时间:自系统启动开始所经历的时间,以秒为单位。

实际时间:也称墙上时间,以秒为单位。

jiffies;内核中用于记录系统自动以来产生的节拍的总数的全局变量,启动时,被内核初始化为0;jiffies一秒钟增加的值即为HZ。即系统启动以来运行的时间。

xtime:内核中保存当前实际时间的全局变量,存放1970年1月1日以来经过的时间(UTC)。

3 具体实现

获取实际时间:系统启动时,内核读取RTC来初始化实际时间,并保存在变量xtime中并通过控制时钟中断维护实际时间;获取系统运行时间:通过两次读取运行时间并计算差值。

实现延时:

使用定时器;
中断下半部机制;
短延时:使用于比时钟节拍还短的延迟,精度高,依靠执行多次循环达到延迟目的(因为内核可以获知处理器1秒内能执行多少次循环(通过bogomips,见4)),内核提供us ns ms 三个级别的延迟函数,对应分别为:udelay ndelay mdelay
忙等待:延迟的时间必须为节拍的整数倍,效率低,使用少
schedule_timeout

4 其他
提高系统的节拍率,
优势:

提高进程抢占的准确度;(提高频率的好处是:系统计时更精确系统的性能提高了。linux进程调度是完全依赖系统定时器的,进行一次进程调度时需要计算每个进程分配的时间片,这个时间片实际上就是一个有定时器中断来控制的。如有3个进程
A、B、C分配的时间片分别是10ms 20ms 30ms,在当进程AB都用完了时间片, C在使用21ms后程序执行了这时节拍率为1000的系统会直接进行下一次的进程调度节拍率为100的系统则会浪费9ms,直到下一次的定时器中断到来时才会重新执行调度。)
提高依赖定时执行的系统调用的执行精度,比如poll 和select函数;

劣势:

时钟中断频率也随之提高,系统负担越重,因为中断处理程序占用的处理器时间或资源越多;
频繁打乱处理器高速缓存并增加耗电

bogomips:

Bogomips能测出一秒钟内某程序运行了多少次。其实,BogoMips的过程就是一个简单计数循环,看ls可以循环多少次。

在linux和uClinux启动过程中,我们通常可以看到以下语句:Calibrating
delay loop... xxxx BogoMIPS。其中Calibrate的意思是校准, 进入时延校准循环;Bogo是Bogus(伪)的意思;MIPS是每秒百万条指令。这里是对CPU进行一个实时测试,来得到一个大体的MIPS数值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: