加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

浅析Linux中的时间编程和实现原理(四)Linux 内核的工作

发布时间:2016-01-16 04:12:36 所属栏目:Linux 来源:网络整理
导读:回顾 近年来,随着 Linux 的广泛使用,对时间编程提出了更高的要求。实时应用、多媒体软件对时钟和定时器的精度要求不断提高,在早期 Linux 内核中,定时器所能

我们所描述过的低精度定时器都是依赖系统定期产生的 tick 中断的。而高精度时钟模式下,定时器直接由高精度定时器硬件产生的中断触发。比如目前系统中有 3 个 hrtimer,其到期时间分别为 10ns、100ns 和 1000ns。添加第一个 hrtimer 时,系统通过当前默认的 clock_event_device 操作时钟硬件将其下一次中断触发时间设置为 10ns 之后;当 10ns 过去时,中断产生,通过系统的中断处理机制,最终会调用到 hrtimer_interrrupt() 函数,该函数从红黑树中得到所有到期的 Timer,并负责调用 hrtimer 数据结构中维护的用户处理函数(或者通过软中断执行用户指定操作);hrtimer_interrupt 还从红黑树中读取下一个到期的 hrtimer,并且通过 clock_event_device 操作时钟硬件将下一次中断到期时间设置为 90ns 之后。如此反复操作。

这样就突破了 tick 的精度限制,用户操作可以精确到 ns 级别,当然中断依然存在延迟,这种延迟在几百个纳秒级别,还是比较高的精度。

Tick 时钟模拟

在高精度时钟模式下,内核系统依然需要一个定时触发的 tick 中断,以便驱动任务切换等重要操作。可是我们在上一节看到,高精度时钟模式下,系统产生时间中断的间隔是不确定的,假如系统中没有创建任何 hrtimer,就不会有时钟中断产生了。但 Linux 内核必须要一个严格定时触发的 tick 中断。

因此系统必须创建一个模拟 tick 时钟的特殊 hrtimer,并且该时钟按照 tick 的间隔时间(比如 10ms)定期启动自己,从而模拟出 tick 时钟,不过在 tickless 情况下,会跳过一些 tick。关于 tickless,和本文主旨无关,不再赘述。

内核时间系统的总体运行情况

查看本栏目更多精彩内容:http://www.bianceng.cn/OS/Linux/

至此,我们可以用下面这张图来总结高精度模式下,内核时间系统的总体运行情况。

图 2. 内核时间系统概览

浅析Linux中的时间编程和实现原理(四)Linux 内核的工作

Linux 用 Generic Timer Framework 层来屏蔽底层硬件的细节,对上抽象出 Clock Sources 和 Clock Event 两个数据结构,分别用来表示计时的硬件和定时的硬件。

用基于红黑树的 hrtimer 系统维护高精度时钟,并用一个特殊的 hrtimer 模拟系统时钟 tick,产生定期的系统时钟中断。

模拟的系统时钟 tick 将驱动传统的低精度定时器系统(基于时间轮)和内核进程调度。

用户层 Timer 的支持和改变

高精度时钟主要应用于实时系统。在用户层,实时时钟的编程接口就是我们在第一部分介绍的 POSIX Timer。本文的第三部分介绍了基于 2.6.16 之前内核的 POSIX Timer 实现细节。

当 hrtimer 加入内核之后,POSIX Timer 的实现细节有一些改变,其中 per process 和 per thread 定时器的实现基本没有变化。但针对 CLOCK_REALTIME 和 CLOCK_MONOTONIC 两个时钟源的基本实现有所改变。以前它们依赖内核中的动态定时器实现,现在这类 Timer 都采用了新的 hrtimer。换句话说,每个时钟源为 CLOCK_REALTIME/CLOCK_MONOTONIC 的 POSIX Timer 都由一个内核 hrtimer 实现。

传统的间隔 Timer 虽然不属于实时应用,也没有很高的时钟精度要求,但在新的内核中,间隔 Timer 也使用了 hrtimer,而非传统的动态 Timer。因此 setitimer 在内核中也不再由时间轮管理了。

总体来说,用户请求的 Timer,无论是精度较低的间隔 Timer 还是精度高的 POSIX Timer,内核都采用 hrtimer 来支持。而由时间轮算法维护的内核动态 Timer 则仅仅在内核内部使用,比如一些驱动程序中还依旧使用 add_timer() 等动态 Timer 接口实现定时需求。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读