[笔记]《Linux内核设计与实现》第十一章定时器和时间管理

目前正在通读《Linux内核设计与实现》一书,本文是对第十一章<定时器和时间管理>的总结。
系统定时器和时钟中断处理程序是Linux系统内核管理机制中的中枢。
主要是概念:
体系结构提供了两种设备进行计时:系统定时器和实时时钟。
1.实时时钟
RTC,用来持久存放系统时间,即便是系统关闭后,它也可以靠主板上的微型电池提供的电力保持系统的计时。
实时时钟最主要的作用是在启动时初始化xtime变量。

2.系统定时器
在内核中可看成是一个电子时间资源,是内核定时机制中最为重要的角色
其根本思想是:提供一种周期性触发中断机制。
实现的方式有:电子晶振进行分频、衰减测量器(decrementer)、可编程中断时钟(PIT)等。

3.实际时间
xtime变量,存放着自纪元(1970年1月1日,即UTC)以来经过的时间。
读写xtime变量需要使用xtime_lock锁,该锁是一个顺序锁。

4.节拍率
tick rate,系统定时器以某种频率自行触发时钟中断,该频率可以通过编程设定,称为节拍率。

5.节拍
连续两次时钟中断的间隔时间

6.HZ
一秒内时钟中断的次数等于HZ。
系统定时器频率(即节拍率)是通过静态预处理定义的,也就是HZ(赫兹),在系统启动时按照HZ值对硬件进行设置。体系结构不同,HZ值也不同,实际上,对某些体系结构来说,甚至是机器不同,它的值都会不一样。
目前,大多数体系结构中,默认的频率是100,则节拍就是10ms。
无节拍的OS
在Linux内核支持“无节拍操作”这样的选项。当编译内核时设置了CONFIG_HZ配置选项,系统就根据这个选项动态调度时钟中断,这样系统在空闲档期不会被不必要的时钟中断所打断。

7.jiffies
全局变量jiffies用来记录自系统启动以来产生的节拍的总数。
启动时,内核将其初始化为0,此后,每次时钟中断处理程序就会增加该变量的值。所以1系统运行时间以秒为单位进行计算,就等于jiffies/HZ。
jiffies变量是无符号长整数(unsigned long)。当jiffies的值超过它的最大存放范围后就会发生溢出,对于32位无符号长整数,最大取值是2的32次方 - 1,当达到了最大值还要继续增加的话,它的值会回绕(wrap around)到0.

8.定时器
有时也称为动态定时器或内核定时器
定时器并不周期运行,它在超时后就自行撤销了。创建-撤销的方式,运行次数不受限制。
一般来说,定时器都会在超时后马上就会执行,但是也有可能推迟到下一次时钟节拍时才能运行。所以不能用定时器来实现任何硬件实时任务。
内核提供了函数可以用来修改已经激活的定时器超时时间
8.1.实现定时器
所有定时器都已链表形式存放在一起
为了提高搜索效率,内核采用的是分组定时器的方法。将定时器按它们的超时时间划分为五组,当定时器超时时间接近时,定时器将随组一起下移。
这种方法在执行软中断的多数情况下,确保内核尽可能减少搜索超时定时器带来的负担。

9.短延迟
多数情况下发生在和硬件同步时,要求的延迟比时钟节拍要短。
如何实现?
通过忙等函数来实现。
内核提供的udelay()函数,依靠执行数次循环来达到延迟效果。缘由:内核知道处理器在1秒内能执行多少次循环,所以udelay()函数仅仅需要根据指定的延迟时间在1秒钟占的比例,来决定需要的循环次数。
9.1.BogoMIPS
用于记录处理器在给定时间内忙循环执行的次数。,主要被udelay()函数和mdelay()函数使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值