实时操作系统可在严格的时间限制内处理数据并执行任务,具有高度可靠性和精度。对于延迟可能导致操作或安全隐患的情况,使用RTOS至关重要,因此,工业系统、汽车控制和医疗设备通常使用RTOS。本文详细介绍了实时操作系统的定义、实时操作系统如何用于测量和控制应用,及其与Windows等标准通用操作系统的区别。
下面概述了实时操作系统的相关基本概念和术语。阅读本文后,建议您访问使用NI硬件和软件构建实时系统,详细了解NI如何帮助您在尽可能短的时间构建出色的实时系统。
通常,操作系统(OS)负责管理计算机的硬件资源,并托管计算机上运行的应用程序。RTOS执行这些任务,但也专门设计用于运行时间极精确和可靠性高的应用程序。 由于停机成本高昂,而程序延迟可能会带来危险,因此在测量和自动化系统中,可靠性尤为重要。
顾名思义,“实时”操作系统必须在已知的最大时限内完成关键操作,至少要在绝对大多数情况下在最大时限内完成关键操作,其中包括操作系统调用和中断处理。完全满足在最大时限内完成关键操作的操作系统,称为“硬实时”操作系统。大多数情况下能满足在最大时限内完成关键操作的操作系统,则称为“软实时”操作系统。实际上,这种严格分类的实用性有限,每个RTOS解决方案都有其独特的性能特征,用户应对其仔细研究。
下面通过列子来帮助理解这些概念。设想您正在为一款新型汽车设计安全气囊系统。这种情况下,微小的时间错误(导致安全气囊过早或过迟展开)都可能导致灾难性伤害。因此需要使用硬实时系统;作为系统设计师,您需要保证所有操作都不能超出特定的定时约束。再例如,如果您要设计一部接收流媒体视频的手机,尽管总体上保持与视频流的同步很重要,但偶尔丢失少量数据也可以接受。对于此类应用,则可以使用软实时操作系统。
选择RTOS的关键原因在于,只要编程正确,RTOS可保证程序按照非常一致的定时运行。实时操作系统为编程人员提供了对任务优先级的高度控制,通常还支持检查以确保满足重要时间节点。
与实时操作系统不同,最常用的个人电脑操作系统(例如Windows)称为通用操作系统。下文将详尽阐述实时操作系统和通用操作系统的区别,但重要的是请记住这两种操作系统各有利弊。诸如Windows此类操作系统通过运行多个程序和服务来维持对用户操作的响应(确保“公平”),而实时操作系统可以精确可靠地运行关键应用(关注编程人员设定的优先级)。
确定性:对于在硬实时操作系统上运行的应用程序(或应用程序的关键部分),如果其时间可保证在一定的误差范围内,则称为确定性应用。
硬实时与 软实时:能绝对保证其执行操作最长时限的操作系统称为硬实时操作系统。相比之下,通常能在一定时间内执行操作的操作系统称为软实时操作系统。
抖动:在程序或循环的连续迭代中,任务执行时间的误差量称为抖动。实时操作系统经过优化,可在正确编程的情况下实现较低的抖动;任务每次执行所需时间将非常接近。
图1: 抖动是衡量任务执行时间在连续迭代中差异的指标。实时操作系统经过优化可将抖动降至最低水平。
实时操作系统设计用于两类应用:事件响应和闭环控制。事件响应应用(例如,装配线零件的自动目视检查)需要在一定时间内响应激励。例如,在该视觉检验系统中,在装配线移动前必须对每个零件进行拍照分析。
设计事件响应应用程序的人员在硬实时操作系统中编程应用时应注意保证响应的确定性(在给定的最长时限内发生)。在上述零件检验的例子中,使用通用操作系统可能会导致无法及时检验零件,从而使装配线延迟、强制报废待测品,或交付可能存在缺陷的零件。
相反,闭环控制系统(例如,汽车巡航控制系统)会持续处理反馈数据以调整一个或多个输出。 由于每个输出值都取决于在固定的时间内对输入数据的处理,因此在循环执行期限内,必须确保生成正确的输出。如果巡航控制系统无法按时间要求确定油门设置大小,会发生什么情况?同样,硬实时操作系统可保证控制系统输入数据在一致的时间内得到处理(采用固定的最长时限)。
值得一提的是,许多必须长时间运行的应用可从RTOS的可靠性中受益。由于实时操作系统通常只运行少量程序,而非同时运行多个应用和进程,因此非常适合需要全天候运行、不允许停机或无法承受过长停机时间的系统。
如您正在考虑在未来的项目中使用RTOS,请查看以下文章:我需要实时系统吗?
Microsoft Windows和Mac OS等操作系统可为开发和运行非关键测量和控制应用程序提供绝佳的平台。然而,这些操作系统的设计目的与实时操作系统不同,不适合运行需要精确定时或长时间运行的应用程序。本节将明确两种操作系统之间的一些主要根本差异,并解释在编写实时应用程序时可以预期的内容。
在编写应用程序时,多数操作系统(不论类型如何)都支持编程人员为整个应用以及应用内部的不同任务(线程)指定优先级。这些优先级向操作系统发出信号,明确设计人员认为最重要的操作。设置优先级的目标在于,如果同时有多个任务准备运行,操作系统将运行具有较高优先级的任务。
实际上,通用操作系统并不总是严格遵循这些编程的优先级。因为通用操作系统旨在同时运行多种应用程序和进程,因此通常会确保每个任务或多或少都能获得一些处理时间。因此在某些情况下,低优先级任务的优先级可能高于其他高优先级任务。这确保了每个任务都有一定的运行时间,但违背了设计人员的意愿。
相比之下,实时操作系统会更严格地遵循编程人员的优先级。对于多数实时操作系统,如果一个高优先级任务当前100%占用了处理器,则高优先级任务完成前,其他任何低优先级任务都不会运行。因此,实时系统设计人员必须在考虑优先级的通时谨慎编写应用。在典型的实时应用程序中,设计人员通常会将时间关键代码(例如事件响应或控制代码)放在一个优先级非常高的区域。其他不太重要的代码(例如将日志写入磁盘或网络通信等)可合并到优先级较低的代码段中。
中断延迟是指设备生成中断到设备中断发生之间的时间量。虽然通用操作系统可能对给定中断的响应时间各不相同,但实时操作系统必须保证所有中断在给定的最长时限内获得响应。换言之,实时操作系统的中断延迟必须有所限制。
一个常见的误解是实时操作系统的性能优于其他通用操作系统。虽然实时操作系统在某些情况下由于应用和服务之间的多任务操作较少而提供了更好的性能,但这并非普遍规律。实际应用程序性能取决于CPU速度、内存架构、程序特性等多个因素。
尽管实时操作系统不一定会提高执行速度,但其能够提供比通用操作系统更精确和可预测的定时特性。
继续阅读以下文章,了解如何使用NI硬件和软件快速构建出色的实时系统: