《Linux设计与实现》学习笔记——定时器和时间管理

基本概念

  • 系统定时器
    • 一种可编程硬件芯片,能够以固定频率产生中断,定时器中断,他的中断处理程序负责更新系统时间,负责执行需要周期性运行的任务。
    • 触发中断的频率即节拍率,可以编程预定。
  • 动态定时器
    • 一种用来推迟执行程序的工具
  • HZ
    • 系统定时器的频率(节拍率)是静态预处理定义的。
  • HZ数大小确定应考虑的因素:
    • HZ越高:
      • 优势:提高时间驱动事件的准确度;调度的粒度更细,进程抢占更准确; 内核定时器以更高的频度和准确度执行。
      • 劣势:节拍率越高,时钟中断程序占用处理器时间越多;并且频繁打乱处理器cache并增加耗电。

Jiffies 全局变量

系统启动以来产生的节拍总数,位于<asm/param.h>
系统运行时间=jiffies/HZ
jiffies的定义
extern unsigned long volatile jiffies;

jiffies回绕的处理

//a超过b,返回真
#define time_after(a,b)  ( (long)(b) – (long)(a) < 0 ) 
//a未超过b,返回真
#define time_before(a,b) ( (long)(b) – (long)(a) > 0 )

unsigned long 使用源码存储,而signed long 使用补码存储,将signed long 强制转换为unsigned long,unsigned long中最高位为1的就会变为负数,使用上面的宏可以在一定范围内,即使发生回绕,时间先后判断,也能正确。
举例 8bit jiffies, jiffies = 255,time1 发生回绕了为1,time2没回绕为254
强转为signed long, jiffies=-1,time1=1,time2=-2
所以time_after(time1, jiffies) : -1 - 1 =-2 < 0
time_after(time2,jiffies) : -1 -(-2) = 1 > 0

实时时钟

  • RTC用来持久存放系统时间的设备。
  • 系统启动时,内核读取RTC来初始化墙上时间,该时间存放在xtime变量中
  • 定时器:周期性触发中断机制。X86是可编程中断时钟PIT,PIT在PC机器中普遍存在

时钟中断处理程序的基本任务 :

体系结构相关部分,体系结构无关部分
与体系结构相关的例程作为系统定时器的中断处理程序注册到内核

  • 获得xtime_lock锁,对jiffies_64和xtime进行保护
  • 需要时应答或重新设置系统时钟
  • 周期性的使用墙上时间更新实时时钟
  • 调用体系无关的时钟例程 : tick_periodic()
    • Jiffies_64+1
    • 更新资源消耗的统计值值。比如当前进程所消耗的系统时间和用户时间
    • 执行已经到期的动态定时器
    • 执行scheduler_tick()函数
    • 更新墙上时间,存放着xtime中
    • 计算平均负载值

定时器

也称动态定时器/内核定时器,管理内核流逝时间的基础。这个工具,能够使工作在指定时间点上执行。
内核在时钟中断后执行定时器,定时器作为软中断在下半部上下文执行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值