自己接触实时操作系统已有很长时间,虽然实际使用的机会不多,然而耳濡目染总归积累了一些经验和知识,在这里整理分享之。
实时操作系统(Real-time Operating System, RTOS)是针对有实时性要求的应用而设计的操作系统。常见的需要使用RTOS的应用有汽车引擎控制、轨道交通、工业机器人、飞机控制系统等。实时操作系统一般提供抢占式调度机制,重要的高优先级任务可以剥夺低优先级任务对CPU的使用权;同时,任务在等待使用资源时,RTOS可以将其CPU的使用权释放给其他就绪的任务,从而使得系统的总体响应速度更快。
目前市场上常见的商用实时操作系统一般有:
- uCosII / uCosIII | Micrium
- FreeRTOS
- Nucleus RTOS | Mentor Graphics
- RTLinux (需要MMU支持)
- QNX (需要MMU支持)
- VxWorks | WindRiver
- eCos
其中除了FreeRTOS和RTLinux外,其余RTOS都是需要商业授权的。uCos II和FreeRTOS是平时接触比较多的RTOS,相关资料比较多。而VxWorks是安全性公认最佳的,用于航空航天、轨道交通和卫星的应用。
一般的RTOS会提供以下全部或部分功能:
- 基于静态优先级(fixed-priority)的抢占式(preemptive)任务调度;
- 进程间通信(基于消息,消息邮箱,管道);
- 基于信号量(semaphore)的进程间同步;
- 任务的创建、暂停、删除;
- 资源访问控制;
- 临界区(critical section)控制;
- 驱动程序接口;
- MMU内存管理、内存动态申请与分配;
- 其他:如GUI用户界面和TCP/IP相关功能。
一般公认的实时操作系统的主要指标是:
- 支持的优先级数量,如64、128或256;
- 使用的任务调度算法;时间片轮转调度,加权轮转调度(weighted round-robin),先入先出(FIFO),优先级调度;
- 中断响应速度,即从中断产生到进入中断服务程序的时间;
- 上下文切换时间,即任务切换时间;
- 操作系统大小以及资源使用(foot print);
- 授权费用与授权方式,是按产品型号计费、产品数量计费还是一次性授权。
其他的选择指标主要就是是否有GUI支持,所支持的CPU型号以及需求功能的规模。从更专业的角度上来说,还有是否支持防死锁(deadlock)和优先级反转(priority inversion),操作系统自身服务程序占用的时间,以及操作系统是否具备确定的执行时间(deterministic)。
关于实时操作系统的两个误区:
1、用了实时系统后,系统响应速度一定更快。
不一定。因为实时操作系统本身引入了执行开销,所以对于小型应用来说,有RTOS的性能也许不如无操作系统的情况。实时操作系统的优势最能体现在中大型系统中,当任务间存在复杂的耦合和依赖关系,并且应用程序经常要长时间等待外部资源时。
2、用实时操作系统就可以保证实时性。
不一定。相对来说,使用实时系统可以改善系统的实时性。但是实时操作系统只是作为工具存在的,如果需要提供实时性保障,还需要使用实时系统理论对任务的可调度性和响应时间进行分析,才可以得到科学、系统的响应性保障。