您的位置:首页 > 运维架构 > Linux

linux下时间子系统

2016-03-29 21:34 405 查看
每个architecture相关的代码中要有实现clock event会让clock source模块。

一般而言,每个CPU形成自己的一个小系统,有自己的调度,有自己的进程统计,这个小系统都是拥有自己的tick设备,而且是唯一的。

硬件有多少个timer硬件就注册多少个clock event device,各个CPU的tick device会选择自己合适的那个clock event设备。

clock_event_device主要用于实现普通定时器和高精度定时器,有时也用于产生tick事件。

为了完成 time keeping功能,硬件需要提供至少一种clock source和clock event source.

timerde中断在kernel即对应jiffies,每次timer中断,jiffies就增加1.

定时测量是由于基于固定频率振荡器和计数器的几个硬件电路完成的。

linux只用RTC来获取时间和日期。

内核通过0x70和0x71I/O端口来访问RTC。

HZ产生每秒钟时钟中断的近似个数,也就是时钟中断的近似个数。

内核使用里那个个基本的计数函数:一个保持当前最新的时间,另一个计算在当前秒内走过的纳秒数。

jiffies变量是一个计数器,用来记录自系统启动以来产生的节拍总数,每次时钟中断发生时它便增加一。

jiffies被初始化为-300×HZ。是一个32位的有符号值。这样做的目的,使得那些不对jiffies作溢出检测的有缺陷的内核代码在开发阶段被及时发现,从而不再出现稳定的内核版本中。

xtime变量存放当前时间和日期。

大多数设备驱动程序利用定时器检测反常情况。

linux考虑两种类型的定时器,即动态定时器和间隔定时器。第一种类型由内核使用,而间隔定时器由进程在用户态创建。

动态定时器存放在timer_list变量中。

被异步激活的动态计时器有参与竞争条件的倾向。

动态定时器的主要数据结构是一个叫做tvec_bases的每CPU变量。

sys_nanosleep();接受一个指向timespec结构的指针作为参数,并将调用进程挂起知道特定的时间间隔用完。

loop_per_jiffy变量用来揭露一个节拍里面有多少个“loop”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: