实时操作系统 (RTOS) 在工业控制、航空航天和电力系统中有大量应用。我自己接触实时操作系统已有几年时间,虽然实际的项目使用经验不多,然而耳濡目染还是积累了一些经验和知识。在这里整理和分享给大家。

实时操作系统(Real-time Operating System, RTOS)是针对有实时性要求的应用而设计的操作系统。所谓“实时性”,就是能否在确定时间内完成指定操作与响应。实时系统的应用通常包括汽车引擎控制、轨道交通、工业机器人、飞行器控制系统等。实时操作系统一般提供抢占式调度机制,重要的高优先级任务可以剥夺低优先级任务对CPU的使用权;同时,任务在等待使用资源时,RTOS可以将其CPU的使用权释放给其他就绪的任务,从而使得系统的总体响应速度更快。

1. 常见的RTOS

目前市场上常见的商用实时操作系统有:

  • uCosII / uCosIII | Micrium
  • FreeRTOS
  • Nucleus RTOS | Mentor Graphics
  • RTLinux (需要MMU支持)
  • QNX (需要MMU支持)
  • VxWorks | WindRiver
  • eCos
  • RTEMS

(国产的另有:RT-Thread和DJYOS.)

其中除了FreeRTOS, RTEMS和RTLinux是免费的之外,其余RTOS都是需要商业授权的。uCos II和FreeRTOS是平时接触比较多的RTOS,相关资料比较多。而VxWorks是安全性公认最佳的,用于航空航天、轨道交通和卫星的应用。如果系统中需要使用复杂的文件、数据库、网络等功能,那么以Linux为基础的RTLinux是比较好的选择;但是如果系统对实时性和确定性的要求非常高,那么可以使用较为简单的RTOS(如 uCosII),再根据需要开发通信协议或者软件包。总体上来说,操作系统的复杂性是与应用软件的复杂性一致的。同时,功能上更复杂的RTOS对硬件系统资源的需求也会更高。

2. RTOS的功能

一般的RTOS会提供以下全部或部分功能:

  • 基于静态优先级(fixed-priority)的抢占式(preemptive)任务调度;
  • 进程间通信(基于消息,消息邮箱,管道);
  • 基于信号量(semaphore)的进程间同步;
  • 任务的创建、暂停、删除;
  • 资源访问控制(并发控制与防止互锁);
  • 临界区(critical section)控制;
  • 驱动程序的管理与接口;
  • MMU内存管理、内存动态申请与分配;
  • 其他功能:如GUI用户界面和TCP/IP相关功能。

3. 选用指标

一般来说,实时操作系统的主要参数指标有:

  • 支持的优先级数量,如64、128或256;
  • 使用的任务调度算法:时间片轮转调度,加权轮转调度(weighted round-robin),先入先出(FCFS),优先级调度;任务调度算法决定了任务响应时间的可分析性;
  • 中断响应速度,即从中断产生到进入中断服务程序的时间;
  • 上下文切换时间,即任务切换时间;
  • 操作系统大小以及资源使用(footprint, ROM及RAM的占用);
  • 授权费用与授权方式,是按产品型号计费、产品数量计费还是一次性授权。

其他的选择指标主要就是文档的完整程度,是否有GUI支持,团队对该OS的了解程度,所支持的CPU型号以及需求功能的规模,以及相应的技术支持。从更专业的角度上来说,还有是否支持防死锁(deadlock)和优先级反转(priority inversion)等提高系统可靠性的功能,操作系统自身服务程序占用的时间大小。对于时间关键性应用,操作系统需要具备相对确定的执行时间(deterministic execution time)。从调试的角度来说,操作系统是否具有调试功能(尤其是多线程、多核)以及支持的调试工具也是重要的指标。

4. 关于RTOS的误区

最后说一下关于实时操作系统的两个误区:

1、用了实时系统后,系统响应速度一定更快。不一定。因为实时操作系统本身引入了执行开销,所以对于小型应用来说,有RTOS的性能也许不如无操作系统的情况。实时操作系统的优势最能体现在中大型系统中,当任务间存在复杂的耦合和依赖关系,并且应用程序经常要长时间等待外部资源时。

2、用实时操作系统就可以保证实时性。不一定。相对来说,使用实时系统可以改善系统的实时性。但是实时操作系统只是作为工具存在的,如果需要提供实时性保障,还需要使用实时系统理论对任务的可调度性和响应时间进行分析,才可以得到科学、系统的响应性保障。

RTOS较好的实践包括减少不确定性API的使用(虚拟内存及分页),减少critical session的长度,以及提供实时系统调度专用的API等。

修订历史

  • 2021-04-12 (v1.2): minor improvements.
  • 2018-05-22 (v1.1): 修改了部分内容,为知乎专栏调整了版式
  • 2015-08-17 (v1.0): 第一版,在云飞机器人实验室发表

>> 本文章版权归作者所有,如需转载请联系作者授权许可。
>> 原文来自: 云飞机器人实验室
>> 原文地址: RTOS | 实时操作系统杂谈
>> 关于我们: 关于云飞实验室
>> 支持我们: 帮助我们可持续发展


作者

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据