首先和大家谈一下实时的概念,有人说实时就是指快,越快实时性越高;也有人说实时就是指性能好,性能越高实时性越好。实际上实时强调的是一种deterministic,或者说确定性。比如需要30s做完一件事,必须要能保证不管在任何情况下,比如高负载其他任务或中断抢占等情况下都不超过30s,这就是一种实时性的体现。一个比较好的例子用来说明实时性,比如一台医疗设备的系统如果实时性没法保障,有可能一些手术动作不能及时完成,会误伤病人。
Linux系统作为一个GPOS(通用操作系统)发展至今已经非常成熟可靠了,并且由于遵循GPL协议,开放所有系统源代码,非常易于裁剪。更重要的是,与其他开源的GPOS或RTOS相比,Linux系统支持多种处理器、开发板,提供多种软件开发工具,同时Linux系统对网络和图形界面的支持非常出色。显然,选择Linux操作系统在产品的开发周期和成本控制方面都有巨大优势。
虽然Linux系统功能强大、实用性强、易于软件的二次开发,并且提供编程人员熟悉的标准API。但是由于Linux系统一开始就被设计成GPOS(通用操作系统),它的目的是构建一个完整、稳定的开源操作系统,尽量缩短系统的平均响应时间,提高吞吐量,注重操作系统的整体功能需求,达到更好地平均性能。所以标准Linux并不提供硬实时性。但生活中确实又有很多场景需要实时性,比如:
为解决linux不具有硬实时的问题,诞生了几种基于Linux的硬实时解决方案,分为两类:
1)直接修改linux内核源代码。对Linux内核代码进行细微修改并不对内核作大规模的变动,在遵循GPL协议的情况下,直接修改内核源代码将Linux改造成一个完全可抢占的实时系统。其缺点是:通过修改Linux内核,难以保证实时进程的执行不会遭到非实时进程所进行的不可预测活动的干扰。该方法的代表是RT-patch(Real Preemption Patch)。
2)双内核法。添加一个实时内核,在内核空间与linux内核并存,把标准的Linux内核作为一个普通进程在实时内核上调度。其优点是可以做到硬实时,并且能很方便地实现一种新的调度策略。常用的双内核法有RT-Linux、RTAI(Real-Time Application Interface)和 Xenomai,
双核法具有较好的实时性。RT-Linux最早出现,开创了双核法的先河,是双核法的代表。基于一种成为实时硬件抽象的层技术RTHAL(Real Time Hardware Abstraction Layer),且为该技术申请了专利,后RT-Linux被WindRiver 收购并商业化,WindRiver于2011年8月彻底停止对其更新和维护,现在 RT-linux 已经不再更新。
PREEMP_RT架构
Xenomai 2001 年 8 月由 Philippe Gerum 发起,其思想是来源于 Karim 的 ADEOS(Adoptive Domain Environment for Operating System)。发布后即被 RTAI 采用,并一度合并为 RTAI/Fusion。后于2005年独立。Xenomai 的实时性能比RTAI略差,因为其完全由 ADEOS 控制中断,而 RTAI 是由其内核对中断进行了截断,非实时的中断才交给 ADEOS,这就减少了一部分实时开销。Philippe Gerum是Adeos和Xenomai项目的创始人和维护者。RTAL项目应该继承自 RT-linux,后期吸收了 Xenomai 的一部分思想,专注实时性能,应用广泛。
xenomai架构
RTAL架构
虽然xenomai和RTAL这两个项目基于同一本质的实时硬件抽象层技术ADEOS(Adoptive Domain Environment for Operating System),但是实际上他们有很多不同之处。这些不同之处主要是由他们不同的目标和各自不同的实现方式造成的。RTAI项目致力于技术上可行的最低延迟;Xenomai除此之外还很看重扩展性,可移植性以及可维护性。Xenoami项目不仅提供双核还对PREEMPT RT实时抢占补丁提供支持,这又是与RTAI项目的一个显著的不同。
另外RT-Linux只允许以内核模块的形式提供实时应用;xenomai 更注重用户空间应用的实时性。
几种linux实时方案对比如下表--Linux实时性改造优缺点对比。
综上,从实时性、硬件支持、社区活跃度、API和商业版权等方面综合考虑,xenomai可能是Linux实时操作系统最好的选择,从实时性,维护难度方面考虑,可能RT-patch更合适。 |