Linux时间管理(一)

linux的时钟系统的两大主要功能是计时和定时。计时功能就是指记录或设置当前的系统时间(包括日期),gettimeofdaysettimeofdaytimeclock_gettimeclock_settime等系统调用与计时相关。

定时功能与定时器相关。设定一个定时器的(定时)时间,设定定时器的回调函数,启动定时器,在(定时)时间到时,定时器的回调函数会被调用。 Linux内核中主要有两种类型的定时器。一类称为timeout类型,另一类称为timer类型。timeout类型的定时器通常用于检测各种错误条件,例如用于检测网卡收发数据包是否会超时的定时器,IO设备的读写是否会超时的定时器等等。通常情况下这些错误很少发生,因此,使用 timeout 类型的定时器一般在超时之前就会被移除,从而很少产生真正的函数调用和系统开销。总的来说使用 timeout类型的定时器产生的系统开销很小,它是下文提及的timer wheel通常使用的环境。此外,在使用timeout类型定时器的地方往往并不关心超时处理,因此超时精确与否,早0.01秒或者晚0.01秒并不十分重要。timer类型的定时器与timeout类型的定时器正相反,使用 timer类型的定时器往往要求在精确的时钟条件下完成特定的事件,通常是周期性的并且依赖超时机制进行处理。例如设备驱动通常会定时读写设备来进行数据交互。

Linux具有动态tick和高精度定时器hrtimer功能,它们需要具体硬件平台的支持,动态tick功能由CONFIG_NO_HZ宏定义控制,高精度定时器由CONFIG_HIGH_RES_TIMERS宏定义控制。动态tick功能是指系统不需要为调度器周期性产生中断(tick),系统只在需要时才产生中断,提高系统效率,降低系统功耗。hrtimer的精度很高,可以用于realtime和多媒体等需要高精度定时的场景,常规定时器timer的精度不高,不能用于需要高精度定时的场景。本文基于CONFIG_NO_HZCONFIG_HIGH_RES_TIMERS都使能的情况进行介绍。

任务调度器(scheduler)使用hrtimer作为其调度定时器,在CPU非空闲时,设置调度hrtimer的到时时间为下一个tick,在hrtimer到时时,触发任务调度。在CPU空闲时,根据timer的超时时间设置调度hrtimer的到时时间。

jiffieslinux当前tick计数,在linux中,一些超时函数的时间单位是ticklinux要求具体的硬件平台提供两个硬件时钟设备,一个是时钟源(clocksource)设备,另一个是时钟事件(clockevent)设备。时钟源设备用于计时;时钟事件设备用于触发时钟事件(产生定时中断),hrtimer通过时钟事件设备实现,它的到时回调函数在时钟事件设备中断服务函数中调用。

系统初始化过程中与时钟系统相关的初始化函数在start_kernel函数中调用,它们的调用顺序:tick_initinit_timershrtimers_inittimekeeping_inittime_initsched_clock_init

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值