- 实时系统必须在严格的时限内产生正确的结果,并与物理过程和确定性行为相协调。
- STR 的架构结合了特定的硬件、RTOS、调度算法(例如 EDF)和安全并发机制。
- 可靠性、安全性、容错性和时间效率是工业、交通运输、国防、电信和医疗等行业的关键要求。
- 实时操作系统 (RTOS) 和实时语言允许设计能够以有限且可预测的延迟响应外部事件的嵌入式应用程序。
实时电子系统已深深融入我们的日常生活,尽管我们常常难以察觉。从汽车安全气囊到空中交通管制,甚至连简单的微波炉,一切都依赖于计算机系统,不仅要确保其正确运行,更要保证其在精确的时刻运行。如果系统哪怕稍微超过时间限制,即使计算结果完美无缺,也会被视为故障。
这些系统的魅力(以及挑战)在于它们需要按照非常精确的时间线与物理世界进行交互。仅仅“快”是不够的:它们必须可预测、稳定,并且与计算机外部发生的事情同步。正因如此,实时系统的设计、分析和测试比传统的通用系统要复杂得多。
什么是实时系统?它与快速系统有何不同?
实时系统(RTS)本质上是一个数字系统,用于在明确的时间限制内控制或监控物理过程。它不仅必须产生逻辑上正确的结果,而且还必须保证在规定的时间范围内做出响应;未能按时完成则构成系统故障。
这种行为的典型例子包括汽车安全气囊或防抱死制动系统(ABS)的启动、机器人试图在空中接住球,以及现代车辆的发动机管理系统。在所有这些情况下,哪怕只有几毫秒的反应延迟,都可能毫无用处,甚至造成危险。
在此语境中,“时间”一词意味着系统的正确运行取决于响应发生的时机,而不仅仅是响应的内容。“真实”则意味着系统必须在外部事件实际演变的过程中做出反应,且反应的时间尺度必须与其所控制的物理环境的时间尺度相一致。
这与简单的“快速”系统形成鲜明对比,在这种系统中,唯一重要的是输出尽快出现,而无需与外部世界同步。功能强大的网络服务器速度可能很快,但如果它没有与物理事件紧密相关的严格截止时间,就不一定是实时系统。
区分它们与在线系统也很重要:这些系统可能始终处于连接状态并响应请求(例如,浏览器或预订系统),但它们不必遵守与物理过程协调的严格截止日期,因此它们并非自动成为实时系统;然而,在现代 Web 应用程序中,实时搜索可能需要类似的延迟和保证。
实际例子:十字路口的交通信号灯控制
实时电子系统的一个典型例子是繁忙路口的交通信号灯控制系统。仅仅“大致”准时地改变信号灯是不够的;必须根据街道上发生的情况不断做出决策。
首先,对交通状况进行监控。在车道和人行横道上安装传感器(感应线圈、摄像头、红外传感器等),用于检测车辆和行人。这些设备不断将数据发送到中央控制器,从而使其能够获取最新的环境信息。
在控制中心,一台嵌入式计算机实时处理数据,应用算法计算排队车辆数量、每条车道的占用情况以及等待的行人数量。根据这些信息,它决定每个方向交通信号灯每个相位的持续时间。
接下来是决策阶段。例如,系统会决定延长拥堵最严重方向的绿灯时间以缓解交通拥堵,或者优先放行等待时间过长的行人过街通道。这些决策基于预先设定的优化策略以及安全和交通流量要求。
一旦做出决定,控制器便会控制交通信号灯的执行器。它会以毫秒级的精度改变交通信号灯的状态,同时遵循黄灯、全红灯、联锁装置和其他安全要求,确保各阶段之间的平稳过渡。
这一切都是通过持续优化实现的:系统不间断地监控交通状况,并实时调整绿灯、黄灯和红灯的时长,以适应突发情况(例如交通拥堵、救护车通过、特定时段的交通流量变化等)。这清楚地表明了我们为什么强调实时性:控制逻辑只有在特定的时间范围内执行决策才有意义。
实时系统的历史与发展
实时计算的起源与20世纪下半叶工业和航空航天过程的控制密切相关。早在1965年,就有参考文献出版,为这些系统奠定了基础;此后不久,在1973年,刘和莱兰德正式提出了严格和灵活实时系统中调度的数学定义。
在计算机仿真领域,“实时仿真”一词开始出现,指的是计算机模型运行速度与它所代表的物理过程速度相当。这就带来了一个经典的难题:要么以牺牲速度为代价来提高模型的精确度,要么降低精度以达到甚至超越实时性能。
图形界面和游戏引擎也出现了同样的情况:为了获得流畅的体验,它们必须对用户输入和场景变化做出足够快的反应,保持较高的、稳定的每秒帧数。
自 20 世纪 60 年代和 70 年代以来,实时系统通过从备受瞩目的真实案例(其中一些几乎是灾难性的)中吸取的教训而日趋成熟,这些案例帮助改进了时间分析和规划技术。
里程碑式案例:阿波罗11号和火星探路者号
实时计算早期历史上最著名的事件之一是阿波罗11号登月舱计算机过载。在下降过程中,制导系统开始发出警报(例如著名的1202警报),表明CPU的处理速度跟不上其工作负载。
根据任务报告,如果这些警报持续存在,宇航员导航数据的可靠性将受到影响,任务可能被迫中止。最终,基于之前的模拟和经验,决定继续执行任务,“鹰”号登月舱成功着陆月球。
本质上,这是一起处理器过载的案例:CPU在规定时间内需要处理的计算量超过了其处理能力,尤其是在将与警报相关的处理任务添加到正常工作负载中时更是如此。此次事件凸显了在故障代价不可接受的系统中,保持充足资源裕度的重要性。
另一个经过深入研究的案例是火星探路者号探测器。在这个案例中,问题并非出在过载本身,而是一种被称为优先级反转的现象,即使CPU的容量看似充足,也会导致错过截止时间。
在抢占式调度系统中,当一个高优先级任务被一个占用共享资源(例如互斥锁)的低优先级任务阻塞时,就会发生优先级反转。与此同时,一个中优先级任务中断了该低优先级任务。结果是,关键任务被一个不太重要的任务间接阻塞,从而破坏了实时性保证。
为了降低这种风险,系统采用了优先级继承协议。当高优先级任务被低优先级任务阻塞时,调度器会暂时将低优先级任务的优先级提升到与高优先级任务相同的级别。这样可以防止中等优先级任务中断高优先级任务,使其能够尽快释放资源,然后恢复到原来的优先级。
这些案例清楚地表明,设计 STR 不仅仅是“有足够的 CPU 余量”,还涉及到理解调度和时序理论,以及临时地将整个系统(硬件、固件和软件)一起进行测试。
实时系统的基本组成部分
典型的STR由专用硬件、软件和接口元件与物理过程相结合而成。它不仅仅是一个程序,而是一个集成系统,必须在已知的时间范围内对外部刺激做出响应。
从物理层面来看,我们发现该系统处于受控状态:这可以是任何可控的过程,例如工业工厂、电机、生产线、交通信号灯、机器人或医疗设备。STR(系统控制终端)测量其状态并施加控制措施,使其保持在所需的参数范围内。
在物理世界和计算机之间存在一个信号接口,它由模数转换器 (ADC)、数模转换器 (DAC) 以及信号调理电路组成。这一层负责调整电压、电流和信号格式,以便数字系统能够读取和生成它们。
关键要素是实时时钟,它在每个采样周期内产生周期性中断。这可以同步数据采集、控制和执行任务,确保测量和指令在需要时精确发出。
该系统通常包括一个人工操作控制台,配备启动和停止控制按钮、参数调节界面以及手动模式强制执行机制。此外,屏幕用于显示状态、报警、趋势以及其他与过程监控相关的任何信息。
重要的状态变更会被实时存储在数据库中,以便记录已发生的事情、调查故障并提取统计数据以改进管理。这些历史信息会随着时间的推移而不断增长,并为维护、优化和重新设计决策提供依据。
许多工业环境都配备了远程监控系统,使得分布式控制中心能够对工厂进行监督,在某些情况下甚至可以进行控制。当一个工厂依赖于另一个工厂时(例如,一个工厂向另一个工厂供应原材料),这种远程监控系统至关重要,因为一个工厂做出的决策会影响整个供应链。
STR 的核心是嵌入式计算机,其软件通常分为几种类型的模块:数字控制算法(调节器、滤波器、反馈回路)、数据记录、地址和管理接口以及与操作员的直接交互。
主要特性:时间、并发性、安全性和效率
实时系统通常处理涉及多个变量、外部设备和不断变化的环境的大型复杂问题。这就要求对系统架构、规划以及任务间的通信机制给予充分的关注。
由于数据来源于物理世界,系统必须处理表示温度、压力、速度或电压等物理量的实数(浮点数、定标数等)。表示和计算的精度对控制质量至关重要。
安全性和可靠性通常至关重要:故障可能造成严重的经济损失、财产损失、人身伤害或环境影响。因此,容错技术、冗余设计和可控降级策略都被整合在一起。
并发性是另一个显著特征。STR 通常会逻辑并行地执行多个任务:传感器读取、控制、通信、日志记录、用户界面等等。这就需要管理共享资源、避免竞争条件,并确保关键部分不会超过截止时间。
效率并非奢侈品,而是必需品。STR(序列化响应)必须在逻辑和时间上都正确,同时还要优化以充分利用CPU、内存和I/O设备。难点在于如何在时间裕量、硬件成本和软件复杂度之间找到平衡。
输入/输出设备通常是专用的,并且与物理过程紧密耦合。我们指的不仅仅是通用端口,而是现场总线、智能传感器和通信协议,这些设备旨在最大限度地减少延迟并确保快速交付。
实时系统类型:硬实时系统、软实时系统和固态实时系统
根据处理时间错误的严重程度,STR(系统响应)可分为若干类别。在硬实时系统中,所有截止时间都必须严格遵守,没有任何例外。任何一个故障都可能导致严重后果,或者至少会使结果无效。
典型的硬实时系统包括飞行控制系统、某些关键医疗系统和电力基础设施保护系统。在这些情况下,即使结果正确但出现延迟也毫无意义;系统必须设计成在任何可预见的情况下都能满足其时间限制。
软实时系统允许偶尔出现延迟。延迟会降低结果的实用性,但结果仍然可以使用。多媒体或数据采集应用就是如此,即使丢失几帧或延迟几个样本,也会降低质量,但系统仍能继续运行。
介于这两种极端情况之间的是完全实时系统。这类系统可以容忍偶尔的延迟,但如果响应延迟到达,则会失去价值并被丢弃。经典的例子包括实时视频或电信系统:为了保持同步,延迟到达的帧会被丢弃。
架构:开放式/封闭式和集中式/分布式
实时系统还可以根据其技术开放程度进行分类。专有系统采用封闭的技术和协议,由单一供应商控制,虽然性能可能良好,但限制了互操作性和发展潜力。
相比之下,开放系统使用公共标准和协议,从而促进不同制造商的组件集成、软件重用以及向新平台的逐步迁移。
另一个重要的区别在于集中式系统和分布式系统。在集中式系统中,主节点负责协调通信和关键处理,而其他节点则充当相对简单的终端或外围设备。
在分布式架构中,处理和通信任务由多个智能节点承担,这些节点或多或少地自主协作。这有利于提高可扩展性、冗余性和接近物理过程,但也增加了时间同步和整体协调的难度。
确定性、中断延迟和响应能力
确定性是简单反应时(SRT)的核心属性:它是指能够以较高的概率预测任务开始和完成所需的时间。关键不在于速度是否最快,而在于反应时间是否已知且有界。
中断延迟是指从外部中断产生(例如,传感器报告事件)到系统开始处理该中断之间的时间。该值至关重要,因为许多服务请求源自物理环境,无法容忍任意延迟。
响应速度关注的是从接受中断到任务执行所需的时间。它包括服务例程的启动时间、相关处理的持续时间以及嵌套中断或抢占的影响等因素。
通常会对确定性和响应性进行定量分析来表征系统:例如,可能要求95% 的任务在特定时间范围内完成。由此,运行在实时操作系统 (RTOS) 上的应用程序必须进行设计,以避免落入最差的预期性能范围。
通过流程和可靠性进行系统控制
在许多先进的实时系统中,应用程序进程本身对系统拥有非常精细的控制权。它们可以明确声明自身的优先级、内存需求(哪些部分应该缓存、允许的交换策略等)以及所需的权限。
虽然乍一看这似乎是一个无政府状态的模型,但实际上它是基于定义明确的流程类型和清晰的限制条件。常见的要求包括:“维护流程的 CPU 使用率不得超过 3%,除非是在明确定义的低负载窗口期。”
可靠性不仅仅意味着不会出现偶发性故障。网络服务提供商 (NSP) 必须在较长时间内将服务质量维持在约定的范围内,即使面对合理的网络中断,也要保证响应时间符合规范。
此外,还需要容错能力:如果发生严重问题(硬件故障、人为错误、外部干扰),系统必须尽可能保留数据和功能,并通过优先处理优先级最高的关键任务来降低其运行速度。
编程语言和实时编程
实际上,许多实时系统(RTS)都是嵌入式的,必须与众多外部组件交互,因此并发编程和直接设备控制至关重要。现代编程语言提供了线程、通信和同步的基本功能,但在实时应用程序中,尤其是在像 Laravel 这样的 Web 框架和实时服务中,必须谨慎使用这些功能。
实现效率至关重要:“漂亮”的语言特性可能会带来高昂的代价,例如响应时间、CPU 使用率或内存消耗。因此,在嵌入式系统中,每一种抽象在被采用之前都会经过仔细评估。
在实时领域,Ada 和 Java(及其实时扩展)是两种占据重要地位的语言。Ada 专为支持关键系统而设计,并不断改进以增强其在该领域的性能。
就 Java 而言,实时功能是后来添加的,例如Java 实时规范和实时核心扩展等规范,它们引入了更适合 RTOS 的内存和调度模型。
实时操作系统(RTOS)
实时操作系统(RTOS)是构建具有严格截止时间的应用程序的核心软件框架。它必须确保其各项服务(调度、中断、同步、I/O 等)的行为可预测。
与通用操作系统不同,实时操作系统(RTOS)经过优化,能够在极短的时间内执行重复性任务。其目标并非“做很多事情”,而是确保最重要的任务在应该运行的时候运行,并且不会出现任何意外情况。
因此,它们往往是轻量级的系统,没有花哨的图形界面或不必要的服务,体积只有几兆字节,并采用极简主义的设计理念。更少的代码意味着更少的意外延迟和更少的故障点,这符合实时性要求。
从历史上看,实时操作系统(RTOS)的研发始于20世纪60年代和70年代,最初应用于军事、航空航天和工业领域。在随后的几十年里,出现了诸如VxWorks、QNX以及Solaris的实时版本等商业产品,这些产品被广泛应用于电信、汽车和嵌入式系统等领域。
随着2000年代和2010年代物联网的兴起,像FreeRTOS这样的轻量级实时操作系统在低功耗联网设备中变得非常流行。与此同时,为了统一接口并提高软件的可移植性,人们提出了实时POSIX扩展。
如今,许多实时操作系统都集成了人工智能和机器学习技术,以优化调度、预测故障并在运行时调整控制参数。当然,所有这些都必须在保证时间可靠性的前提下进行。
实时操作系统 (RTOS) 市场价值数十亿美元,预计在未来几年将稳步增长,这主要得益于医疗设备、工业自动化、汽车和关键基础设施系统的发展。
一个好的实时操作系统必须满足的要求
现代实时操作系统(RTOS)必须具备多任务处理和抢占能力,以便抢占优先级较低的任务,立即执行更紧急的任务。基于优先级的调度是目前主流的调度模式:它总是优先运行最重要且准备就绪的任务。
此外,它还必须提供通信和同步机制(队列、信号量、互斥锁、事件),旨在最大限度地减少不必要的阻塞,并避免优先级反转等现象,在适当情况下应用继承协议或优先级上限。
充分了解实时操作系统的时序行为至关重要:最大中断延迟、上下文切换时间、同步原语的执行时间等。如果没有这些数据,就无法证明应用程序能够满足其截止时间。
调度算法:EDF 及其他模型
任务调度是实时系统的基石之一。在众多研究最多的算法中,最早截止时间优先(EDF)算法尤为突出,它是一种动态优先级调度器,在许多实时场景中都是最优的。
EDF 根据任务的绝对完成期限来确定优先级:在任何给定时间,截止日期最近的任务优先级最高。这确保在特定条件下,如果存在一个能够满足所有截止日期的可行方案,EDF 就能找到它。
该算法具有预防性:如果在任务执行过程中出现另一个截止时间更紧迫的任务,系统可以中断当前任务并将 CPU 分配给新任务。EDF 通常使用优先级队列来实现,优先级队列的排序依据是距离截止时间的剩余时间。
EDF 的优势之一在于,只要任务集可调度,它就能在保证截止时间的前提下实现接近 100% 的 CPU 利用率。此外,它还能很好地适应截止时间或预计执行时间会发生变化的动态环境。
例如,如果我们有两个进程 P1 和 P2,它们的周期和计算时间不同,EDF 将始终优先选择绝对截止时间更近的实例,随着新的激活到来和截止时间的重新计算,交替执行该实例。
然而,EDF并非完美无缺。在工作负载极高且变更频繁的情况下,高效实施EDF可能变得十分复杂;在某些情况下,对于交稿期限较长的任务,可能会出现资源不足的问题。
其他知名的实时算法包括速率单调算法(RM)和截止时间单调算法(DM),它们根据任务周期或相对时间范围使用固定优先级。每种算法都有其自身的最优条件和适用领域。
实时系统的典型应用
STR(动态响应装置)无处不在。在流程工业中,它们被用于控制和监控食品、饮料、化工、制药等行业的生产线,确保关键变量保持在限值范围内,最终产品达到预期质量。
在交通运输领域,飞机、火车、汽车和轮船都依赖于实时导航、控制和安全系统。这些系统包括防抱死制动系统(ABS)、牵引力控制和稳定性控制系统,以及铁路和海上交通管理系统。
现代电信依赖于高速网络中信息流的实时管理:数据包交换、实时语音和视频传输、服务质量保证和延迟降低等任务,按时完成至关重要。
在国防领域,监视、雷达、电子战和网络安全系统利用实时平台在毫秒或更短时间内检测和应对威胁,从而保护关键基础设施和战略资源。
在医疗领域,生命体征监护仪、呼吸机、起搏器或输液泵等设备都使用实时软件进行操作,这些软件必须能够安全地对患者病情的变化做出反应,如果错过最后期限,往往会造成生死攸关的后果。
除了数字世界,生物过程中也能观察到实时性。例如,种子只有在环境条件(湿度、温度、光照)符合特定范围和时间条件时才会发芽。如果种子一接触土壤就发芽,而不遵循这些时间条件,它很可能无法存活。这可以很好地比喻一个系统如果不能适应其时间环境,就会走向失败。
从宏观角度来看,STR涵盖电信、多媒体、工业控制、机器人、航空电子、铁路、汽车、家用电器、科学实验和医疗系统等领域。随着新技术的不断涌现,这一清单还在持续增长。
在所有这些环境中,都需要特定的实时通信协议,例如 CAN、Token Bus、TDMA-TTP、改进的 CSMA/CD 或 Positive Acknowledge or Retransmit (PAR) 方案,这些协议可以减少传输时间并保证数据到达的时间。
与此同时,专有的实时软件工程也得到了改进,数据流方法、数据结构和面向对象设计都进行了调整,以表示中断、上下文变化、异步通信以及从具有严格时间要求的错误中恢复。
综上所述,实时系统为何成为现代技术基础设施的重要组成部分就更加显而易见了:它们负责数千个关键和日常流程的安全、可靠运行,用户无需考虑在几分之一秒内“幕后”发生的一切。