《Linux内核设计与实现》读书笔记—定时器和时间管理

jiffies

  1. jiffies是一个记录系统自启动到现在的节拍总数的全局变量。
  2. jiffies可以用来执行一些推后固定时间的处理。由于其定义为unsigned long,因此在32为计算机上为一个32bit无符号整数,有溢出的风险。
  3. 使用宏time_before(unknown, known)和time_after(unknown, known)来规避掉jiffies溢出翻转的风险。

硬时钟和定时器

  1. 计算机体系结构一般提供两种设备进行计时,一种是实时时钟,一种是设备定时器。
  2. 实时时钟(RTC)是用来持久存放系统时间的设备,即便系统关闭后,也可以通过主板上的微型电池提供的电力保持系统的计时。
  3. 系统定时器为内核系统中最为重要的定时机制,它的核心作用为:提供周期性触发中断的能力。

时钟中断处理程序

  1. 时钟中断处理程序主要分为两部分,一部分是体系结构无关的,一部分是体系结构相关的。
  2. 体系结构相关的工作主要包括了:获得xtime_lock锁,以便对访问jiffies_64和墙上时间xtime进行保护;需要时应答或重新设置系统时钟;周期性地使用墙上时间更新实时时钟;调用体系结构无关的时钟例程:tick_periodic()。
  3. 体系无关的工作主要包括了:给jiffies_64变量加一;更新资源消耗的统计值,比如当前进程所消耗的系统时间和用户事件;执行已经到期的动态定时器;执行scheduler_tick()函数;更新墙上时间,该时间存放在xtime变量中;计算平均负载值。

实际时间

  1. 当前实际时间定义的结构体为struct timespec xtime;其中xtime.tv_sec存放着自1970年1月1日以来经过的秒数;xtime.tv_nsec记录子上一秒开始经过的ns书。
  2. 使用xtime前需要先获取xtime_lock,其为一个顺序锁。

定时器

  1. 通过设置一个定时器,超时时间和超时后的处理函数,并启动定时器之后,该函数则会在定时器超时时自动执行,但其没有周期性,执行一次后就撤销了,因此也被称为动态定时器。
  2. 定时器由结构timer_list表示,在定时中断的下半部软中断中执行。内核提供了一组与定时器相关的接口用来简化管理定时器的操作。
  3. 创建定时器时需要定义: struct timer_list my timer;接着需要通过一个辅助函数来初始化init_timer(&my_timer);add_timer(&my_timer)用来激活定时器。
  4. my_timer.expires表示定时器的超时时间,my_timer.data表示传递给函数的参数,my_timer.function表示定时器超时后调用的函数。
  5. mod_timer(&my_timer, jiffies+new_delays)用来修改定时器的超时时间,del_timer(&my_timer)用来删除定时器。多处理器系统上,一般无法确认使用del_timer()删除定时器时,该定时器是否在其他处理器上正在执行,因此建议使用del_timer_sync()替代。

延迟执行

  1. 内核除了使用下半部和定时机制以外,还需要其他方法推迟执行任务。这种推迟通常发生在等待硬件完成某个任务,并且等待时间很短时。
  2. 忙等待是一种最简单的延迟方法,即while()循环到系统节拍器jiffies满足条件时退出循环。
  3. 短延迟用来延迟相对较短的时间,内核提供了三个方法,udelay()/ndelay()/mdelay分别可以进行us级,ns级和ms级别的延迟。系统通过BogoMIPS获取当前处理器可以在1秒钟执行多少次循环,从而进行时间推算。
  4. schedule_timeout()方法可以让当前的函数睡眠到指定的延迟时间耗尽后再重新运行。当指定的时间到期后,该任务会被唤醒并放到就绪队列中重新等待调度。schedule_timeout()只能在进程上下文中使用,无法再中断上下文中使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值