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

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数值。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值