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数值。
目的:
内核中存在大量基于事件驱动的函数,为满足这些函数定期(周期)性执行的需要—即为此类函数提供时间;
管理系统的运行时间以及当前日期和时间的管理—提供绝对时间和相对时间.
核心:
系统定时器和时钟中断处理程序是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数值。
相关文章推荐
- Linux内核学习笔记八——定时器和时间管理
- 内核定时器和时间管理学习笔记
- linux时间管理 之 内核定时器
- 读薄《Linux 内核设计与实现》(5) - 定时器、时间管理和内存管理
- linux驱动之定时器的介绍和内核时间的学习
- LINUX内核设计思想之定时器和时间管理
- Linux内核学习笔记八——定时器和时间管理
- 【转】linux内核时钟处理机制-定时器管理接口数据结构
- Linux内核学习3:进程管理1
- linux学习笔记——日志分析管理同步、修改时间、同步时间
- 读深入理解Linux内核 (第6章 时间管理)
- (笔记)Linux内核学习(八)之定时器和时间管理
- Linux内核学习笔记八——定时器和时间管理
- Linux内核学习笔记八——定时器和时间管理
- Linux内核架构 Linux设备驱动 Linux电源管理 Linux音频子系统 Linux中断子系统 Linux时间管理系统 Linux输入子系统
- Linux之定时器与时间管理
- linux驱动学习之内核定时器使用
- Linux之定时器与时间管理 【转】
- Linux内核学习笔记之进程管理2—进程的组织形式
- [linux学习笔记]第2天:时间管理,命令帮助信息,文本查看,权限及用户管理,BASH和变量,脚本