1. 实时操作系统简介

什么是实时操作系统?

一般而言,操作系统的任务是管理计算机的硬件资源和应用程序。 实时操作系统会执行这些任务,但是运行时间精度和可靠度都极高。 在实际应用中,有的系统失常代价高昂,甚至会引起安全事故。这时,操作系统的时间精度和可靠度都显得格外重要。

顾名思义,实时操作系统必须在已知的关键时间内完成关键操作,至少要在绝对大多数情况下在已知时间内完成关键操作。 部分这类操作包括操作系统调用和中断处理。 完全满足在指定时间内完成关键性操作的实时操作系统,被称为“硬实时”操作系统。大多数情况下能满足在指定时间内完成关键性操作的实时操作系统,被称为“软实时”操作系统。 实际情况中,上述分类的指导意义有限。每个实时操作系统都有独特的性能特征,用户在决定使用某个实时操作系统之前需要仔细研究这些特征。

下面通过列子来帮助理解实时操作系统的概念。 假设您在为一款新车设计安全气囊系统。 在该情况下,极小的时间误差(太早或太迟)都会产生灾难性后果,甚至导致人员伤亡。 因此,需要一个硬实时系统;在系统设计上要确保没有任何操作的优先级可以凌驾于时间限制之上。 另一方面,如要设计一个接收流媒体手机,在保持大致不丢失流媒体数据的前提下可以偶尔遗失少量数据。 在这种应用中,一个软实时操作系统就可满足要求。

如果编程合理,实时操作系统可保证程序运行在时间上的稳定可靠性。 实时操作系统向用户提供任务优先级排序的高度控制权,也通常会允许用户检查任务执行是否符合时间上设定的要求。

与实时操作系统相比,个人电脑上最常见的操作系统称为通用操作系统,例如,Windows。 下面将详尽阐述实时操作系统和通用操作系统的区别。在此之前,要先了解两种操作系统的优劣。 Windows等操作系统通过运行多个程序和服务来维持对用户操作的响应,实时操作系统通过精确和可靠度定时机制(关注编程人员设定的优先级)来运行关键性应用程序。

重要的术语和概念

确定性:运行在实时操作系统上的应用程序(或应用程序的关键性片段),如能保证时间精度,就认为是确定性的程序。

软实时和硬实时:完全能保证时间精度的操作系统,称为硬实时操作系统。 多数情况下能保证时间精度的操作系统,称为软实时操作系统。

抖动:程序开始时,首次循环相对于后续循环在时间上的差异,称为抖动。 实时操作系统可确保在编程合理的情况下,抖动为最小水平;任务首次执行与后续循环执行所用的时间非常接近。

实时操作系统和通用操作系统区别-编程知识网

图1:抖动指一次任务执行和后续任务执行之间在时间上的差异。 实时操作系统通过各种优化方式使抖动最小化。

 

至页首

2. 实时应用程序范例

实时操作系统用于两类应用:事件响应和闭环控制。 事件响应类应用需要在指定的时间内对外界触发条件作出响应。例如,生产线上自动视觉模式识别。 在视觉识别系统中,必须在生产线移动之前对待测部分进行拍照和分析。

对运行在硬实时操作系统上的程序进行严格的设计和调试之后,在事件响应上工作的设计人员可保证响应的确定性(在指定时间内发生)。 在视觉识别案例中,使用通用操作系统可能会导致无法及时检测待测部分,从而降低生产线速度、强制报废待测品,甚至交付潜在的次品。

在闭环控制系统中,例如,汽车巡航控制系统会连续处理反馈数据,调整输出。 因为输出数据取决于是否能在指定时间内处理完输入数据。在指定时间内完成任务至为重要,只有这样才能有正确的输出。 如果巡航系统无法在给定时间点上判断合适的油门设置,会发生什么情况? 硬实时系统可保证在指定时间内及时处理控制系统的输入数据。

还必须指出,很多程序必须运行多个周期后才能充分体现实时操作系统的可靠性。 与通用操作系统同时处理多个程序和进程不同,实时操作系统上只有少量程序运行。实时操作系统适用于宕机代价高昂的全天候系统。

如要在项目中使用实时操作系统,请查看我是否需要实时系统?

至页首

3. 探究事实:实时操作系统与通用操作系统有哪些不同之处

Windows、Mac OS等操作系统是开发和运行非实时测量和控制应用程序的优秀平台。 这些操作系统使用于实时操作系统之外的使用场合。对于要求精确定时和长时间稳定运行的系统而言,通用操作系统不是理想的平台。 下面将阐述两种操作系统之间的区别,以及编写实时应用程序时的注意事项。

设置优先级

编写应用程序时,大多数操作系统都允许程序员指定应用程序的总体优先级,以及应用程序中不同任务(线程)的优先级。 这些优先级设置将程序和任务的重要性告知操作系统。 如两个任务同时运行,操作系统将优先运行优先级设置较高的任务。

在实际应用中,通用操作系统不会始终严格按照程序设置的优先级执行。 因为通用操作系统可同时运行多个应用程序和进程,所有任务都会被分配到一些处理时间。 在某些情况下,低优先级任务的临时优先级可能会比高优先级任务更高。 这样,每个任务都会分配到一定的运行时间。这会违背程序设计人员的设计初衷。

实时操作系统可严格按照程序员设置的优先级执行程序。 在多数实时操作系统上,如果一个高优先级任务占用率100%的处理器资源,低优先级任务将一直等待直到高优先级任务完成。 因此,设计实时应用程序时,必须谨慎、合理设置优先级。 在一个典型的实时应用程序中,设计者应该将实时代码放置在高优先级的部分。 写入磁盘、网络通信等较低优先级的代码应该放在较低优先级的部分。

中断延迟

设备生成一个中断和设备中断发生之间的时间,称为中断延迟。 通用操作系统响应中断需要的时间不固定,实时操作系统必须确保在一个固定的时间内响应中断。 也就是说,实时操作系统的延迟必须是已知的固定的值。

性能

一个常见的误解是实时操作系统的性能高于通用操作系统。 在某些情况下,因为不需要在多个应用程序和服务之间进行多任务操作,实时操作系统的性能更好。这并不是绝对的规律。 实际应用程序的性能取决于CPU主频、内存架构、程序特征,等等。

即使实时操作系统对执行速度没有直接影响,但是它与通用操作系统相比具有更精确和更可靠的时间特性。