【Kernel】定时器和时间管理
一、相关概念
时间管理在内核中占有非常重要的地位,相对于事件驱动而言,内核中有大量的函数都是时间驱动,包括很多周期执行函数、推后执行函数等等。接下来这里要提及几个相关的概念:
相对时间:时间的偏移量
绝对时间:固定的时刻
(以上两条是笔者理解)
节拍率(tick rate):系统定时器以某种频率自行触发(经常被称为击中或射中)时钟中断,该频率可通过编程预定。节拍率越高解析度和准确度越高。
节拍(tick):连续两次时钟中断的间隔时间(节拍率的倒数)。
墙上时间:实际时间。定义位于linux/time.h。
系统运行时间:自系统启动开始所经的时间
jiffies:记录系统启动以来产生的节拍总数,是一个无符号长整型。定义位于linux/jiffies.h中。(内核中将秒转换为jiffies比较常见)
实时时钟(RTC):用来持久存放系统时间的设备,即便系统关闭后,它也可以靠主板上的微型电池提供的电力保持系统的计时。在PC体系结构中,RTC和CMOS集成在一起,而且RTC的运行和BIOS的保存设置都是通过同一个电池供电的。
系统定时器:提供一种周期性触发中断机制。(电子晶振进行分频、衰减测量器、PIT、APIC、TSC)
定时器:管理内核流逝时间,使工作在指定时间点上执行。定义位于linux/timer.h。
忙等待:精确率要求不高时最简单的延迟方法。
短延迟:有时内核代码不但需要很短的延迟,还要求延迟的时间很精确。这种情况多发生在和硬件同步时,也就是说需要短暂等待某个动作的完成。内核提供了三个可以处理ms,ns,us级别的延迟函数,定义在文件linux/delay.h。
BogoMIPS:记录处理器在给定时间内忙循环执行的次数。
schedule_timeout():一种更理想的延迟执行方法,该方法会让需要延迟执行的任务睡眠到指定的延迟时间耗尽后再重新运行。但该方法也不能保证睡眠时间正好等于指定的延迟时间,只能尽量使睡眠时间接近指定的延迟时间。
关于此处的实现由于实力有限,暂时不进行分析