【操作系统】各类实时操作系统调研

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接

文章目录

各类实时操作系统调研

       前一段时间公司更新硬件,说是也想看看软件能不能升级,之前使用的 Xilinx 提供的Linux,不是实时操作系统,新硬件上想更新为实时操作系统,所以做了下面的调研。


现阶段的RTOS分成两个阵营:

非Linux阵营:

  • VxWorks;
  • RTEMS。

Linux阵营:

  • RT-Linux;
  • PREEMPT-RT:单内核方法,通过开放更多的内核可抢占点,进而提高实时性;
  • WindRiver Linux;
  • RT-AI;
  • Xenomai。

常用的双内核法实时补丁有 RT-Linux/GPL、RT-AI 和 Xenomai,其中RTLinux/GPL只允许以内核模块的形式提供实时应用;而RTAI和Xenomai支持在具有MMU保护的用户空间中执行实时程序。


Xenomai

Xenomai(从资料完备,社区活跃度,兼容性,实时性方面考虑)

       2001 年 8 月由 Philippe Gerum 发起,其思想是来源于 Karim 的 ADEOS(Adoptive Domain Environment for Operating System)。发布后即被 RTAI 采用,并一度合并为 RTAI/Fusion。后于2005年独立。Xenomai 的实时性能比RTAI略差,因为其完全由 ADEOS 控制中断,而 RTAI 是由其内核对中断进行了截断,非实时的中断才交给 ADEOS,这就减少了一部分实时开销。

官方资料https://source.denx.de/Xenomai/xenomai/-/wikis/home
网上资料https://blog.csdn.net/pwl999/article/details/109412539介绍的很详细,推荐
                  http://wiki.csie.ncku.edu.tw/embedded/xenomai
                  https://www.cnblogs.com/wsg1100/p/12864199.html


PREEMPT-RT

PREEMPT-RT (实时性逊于Xenomai,之前OAI使用的就是这个方案)

       单内核版本的实时Linux,需要打patch。但是也有已经集成了PREEMPT-RT feature的版本,例如 Ubuntu LowLatencyrt-centos

官方资料https://rt.wiki.kernel.org/index.php/Main_Page
网上资料https://blog.csdn.net/fightingskyer/article/details/118877564
                  https://lwn.net/Articles/146861/


RT-Thread

RT-Thread(国产,资料丰富,而且社区活跃,但是是一个IoT OS)

       RT-Thread 就是一个 IoT OS。物联网操作系统是指以操作系统内核(可以是 RTOS、Linux 等)为基础,包括如文件系统、图形库等较为完整的中间件组件,具备低功耗、安全、通信协议支持和云端连接能力的软件平台。同样的 uC/OS,FreeRTOS也是IoT OS,不适用于我们的情况。

官方资料https://www.rt-thread.org/


WindRiver Linux

WindRiver Linux(商业平台,网上资料很少)
       Wind River Linux是商业级Linux,网上资料很少,不是开源版本。

官方资料https://www.windriver.com/products/linux


RTAI

RTAI(ARM兼容差,更新慢)
       RTAI最初使用RT-Linux的方法,但后来转向在Adeos内核下运行。Adeos本质上是一个“管理程序”系统,它作为辅助任务运行Linux和实时系统,并允许两者通信。它允许在次要操作系统之间建立优先顺序,以便实时组件可以首先响应硬件事件。这种方法被认为更加灵活,并且避免了RT-Linux专利。使用RTAI仍然需要编写内核模式代码来处理任务的硬实时部分。
【操作系统】各类实时操作系统调研

官方资料https://www.rtai.org/


RT-Linux

RT-Linux(已停更,成为历史)
       RT-Linux方法是将硬件置于一个小型的硬实时系统的控制之下,并将整个Linux作为一个单一的、低优先级的任务在实时系统下运行。对实时模式的访问是通过编写一个内核模块获得的,该模块使用一组高度受限的原语。为实时模块和普通Linux用户空间之间的通信提供了通道。由于系统的实时端控制硬件并首先获得其资源,因此可以保证最大的响应时间。

       RT-Linux应该是第一批实时性linux,可以提供硬实时,有两个版本,免费版和收费版,收费版最初由 FSMLabs(Finite State Machine Labs)公司开发,在2007年卖给了 WindRiver。之后 WindRiver 将其作为自己的产品 WindRiver Linux 的一个实时核心(real-time core)象征性的维护了一段时间,与2011年8月彻底停止更新和维护。RT-linux 的性能应该很好,WindRiver 应该是出于竞争的目的对其进行了收购,现在 RT-linux 已经不再更新,因此对于我们也只能当做了解一段历史了。


性能比较

RTAI vs. Xenomai

【操作系统】各类实时操作系统调研

       上图为RTAI和Xenomai两个实时内核分别与标准Linux内核组成双内核系统的分层结构。可以看到两者有稍微不同的组织形式,与 Xenomai让ADEOS掌控所有的中断源不同的是,RTAI拦截它们,使用ADEOS将那些RTAI不感兴趣的中断通知送给Linux(也就是,中断 不影响实时时序),目的是提高性能,因为在这种情况下,如果中断是要唤醒一个实时任务,就避免了由ADEOS管理中断的开销。从这里可以看出,RTAI的实时性能应该是比Xenomai要好的。

       RTAI(Real-Time Linux Application interface)虽然实时性能较好,但对ARM支持不够,更新速度极慢,造成项目开发周期长,研发成本高。

       与RTAI相比,Xenomai更加专注于用户态下的实时性、提供多套与主流商业RTOS兼容的API以及对硬件的广泛支持,在其之上构建的应用系统能保持较高实时性,而且稳定性和兼容性更好;此外,Xenomai社区活跃,紧跟主流内核更新,支持多种架构,对ARM的支持很好。


RT_PREEMPT vs. Xenomai

       RT_PREEMPT是基于linux架构去改进让更多地方能preempt达到real-time的能力。Xenomai则是改变整个系统架构新增一个调度员与IRQ管理的机制,让处理实时任务流程简化到只剩ipipe-> scheduler就能执行,不会因linux庞大的架构影响到实时任务的处理时间。

网上关于NON-PREEMPT、PREEMPT-RT Linux 、 Xenomai测试数据:
Cyclictest
测试用例:POSIX间隔计时器,间隔500微秒,100000次循环,100%负载。
/****************************/
T :Thread
P :优先
I :间隔
C :执行周期数
Min :最小延迟
Act :此次延迟时间
Avg :平均延迟
Max :最大延迟
/*****************************/

使用PREEMPT LINUX

root# sudo ./cyclictest -t1 -p 80 -i 500 -l 10000
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 0.00 0.01 0.05 1/61 2064          
T: 0 ( 2063) P:80 I:500 C: 100000 Min:     27 Act:   49 Avg:   42 Max:    1060

使用RT-PREEMPT

root# sudo ./cyclictest -t1 -p 80 -i 500 -l 10000
Min:     22 Act:   31 Avg:   32 Max:     169

使用Xenomai

root# /usr/xenomai/bin/cyclictest -t1 -p 80 -i 500 -l 10000 
0.08 0.06 0.05 1/61 2060          
T: 0 ( 2060) P:80 I:     500 C:  100000 Min:      -4 Act:      -2 Avg:       0 Max:      30

大家还有什么知道的实时操作系统,可以在下面的评论中打出来,我补充进去。


这里是从善若水的博客,感谢您的阅读

上一篇:关于RTOS中信号量、互斥量、邮箱、消息队列的一些理解


下一篇:水货