博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接
文章目录
各类实时操作系统调研
前一段时间公司更新硬件,说是也想看看软件能不能升级,之前使用的 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 LowLatency、rt-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仍然需要编写内核模式代码来处理任务的硬实时部分。
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
大家还有什么知道的实时操作系统,可以在下面的评论中打出来,我补充进去。
这里是从善若水的博客,感谢您的阅读