1996 年 6 月 4 日,阿丽亚娜 5 型火箭首次发射,在主发动机点火后约 37 秒(离地升空约 30 秒)爆炸解体。调查结果令人震惊:原因是一个 64 位浮点数被转换为 16 位整数时发生溢出,触发了未处理的异常,导致惯性导航系统失效,火箭偏离轨道。
更讽刺的是:这段代码来自阿丽亚娜 4 型,在 4 型上从未出错——因为 4 型的飞行速度从未达到让这个值溢出的范围。5 型更快,溢出了。
这次价值约 5 亿美元的爆炸,是实时系统工程教科书上最经典的案例。它说明了实时系统的本质:正确性不只是功能上的正确,还包括时间上的正确。
破除误解:实时不是"很快"
"实时"最大的误解是认为它意味着"极其快速"。实际上,实时系统的定义是:系统能够在规定的时间期限(Deadline)内可靠地完成任务。
一个以每秒一次频率采集温度的工业传感器,是实时系统。一个交互响应时间 5 毫秒的高频交易算法,也是实时系统。关键不是绝对速度,而是截止时间的确定性(Determinism):系统必须保证在最坏情况下,也能在截止时间前完成。
这里还藏着第二重误解:实时不只是"按时完成",还包括"按时的稳定性"。两次执行之间时刻偏差的波动叫做抖动(Jitter)。一个控制回路即便每次都在截止时间前算完,但若执行时刻忽早忽晚,控制律所假设的"等间隔采样"被破坏,控制效果照样会变差。对电机控制、雷达、音视频这类系统,低抖动有时和满足截止时间同等重要。
硬实时 vs. 软实时
| 类型 | 截止时间违反的后果 | 典型场景 |
|---|---|---|
| 硬实时(Hard Real-Time) | 系统彻底失败(可能致命) | 飞行控制、汽车防抱死刹车(ABS)、心脏起搏器、核电站控制 |
| 软实时(Soft Real-Time) | 性能降级,但系统仍可接受 | 视频流媒体、游戏渲染、在线电话 |
| 固实时(Firm Real-Time) | 截止时间后结果无用,但不危险 | 高频交易、某些工业控制 |
这个分类至关重要:硬实时系统不允许统计意义上的"大部分时候满足截止时间",必须保证最坏情况执行时间(WCET,Worst-Case Execution Time)下仍满足要求。
WCET 分析:最坏情况下花多少时间?
实时系统设计的核心挑战是 WCET 分析:确定一段代码在最坏情况下需要多少时间。
这比表面上难得多: - 缓存:命中缓存(纳秒级)vs. 缓存未命中(内存访问,微秒级)相差 100 倍以上 - 流水线:分支预测失败导致不确定的延迟 - 中断:随时可能打断程序执行 - DMA:直接内存访问会与 CPU 竞争内存总线
现代高性能 CPU(乱序执行、超标量、深度缓存)是 WCET 分析的噩梦——它们为平均情况优化,但最坏情况难以预测。这正是为什么安全关键实时系统(航空、核电)往往使用几十年前设计的"过时"处理器——它们的行为完全可预测。
多核处理器把问题推向新的高度:多个核心同时争用共享的末级缓存、内存总线和片上互连,彼此制造出难以预测的干扰通道(Interference Channel)——一个核上的任务时序,会被另一个核上看似无关的任务拖慢。为此航空认证机构专门发布了 CAST-32A(CAST 团队,2016 年)及其后续的 AMC 20-193 / AC 20-193(2022 年),列出多核认证必须满足的额外目标。这也是为什么安全关键领域至今对"是否开启多核"慎之又慎。
实时调度:如何安排任务执行顺序
实时系统通常有多个任务需要执行,调度器(Scheduler)决定执行顺序。
速率单调调度(RMS,Rate-Monotonic Scheduling): - 周期越短(频率越高)的任务,优先级越高 - Liu & Layland 在 1973 年证明:对 $n$ 个周期性任务,若 CPU 利用率满足:
( 是任务 $i$ 的执行时间, 是其周期),则 RMS 保证所有任务都能在截止时间前完成。当 ,上界趋近于 。
需要强调的是,这个利用率上界只是充分条件,而非必要条件:利用率超过 69% 的任务集,仍可能完全可调度。判定固定优先级任务集是否真正可调度的精确测试是响应时间分析(Response-Time Analysis)——Joseph 与 Pandya(1986)、Audsley 等人(1993)给出迭代公式,逐个算出每个任务在最坏情况下的实际响应时间,再与其截止时间比较。Liu & Layland 还顺带证明了:在所有固定优先级分配方案中,RMS 是最优的——若 RMS 调度不了,其他任何固定优先级方案也调度不了。
最早截止时间优先(EDF,Earliest Deadline First): - 截止时间最近的任务优先执行 - 理论上最优(只要可调度,EDF 就能调度),CPU 利用率可达 100% - 实践中,负载突然增加时 EDF 的过载行为(很多任务同时错过截止时间)比 RMS 更难控制
优先级天花板协议(PCP)和优先级继承(PI):处理优先级反转(Priority Inversion)问题——低优先级任务持有高优先级任务需要的锁,导致高优先级任务被间接阻塞。Sha、Rajkumar 与 Lehoczky 在 1990 年的经典论文里给出了系统化解法,其中 PCP 能把高优先级任务的最坏阻塞时间压到"至多一个低优先级临界区"。
火星探路者号(Pathfinder,1997 年 7 月着陆)就栽在这个问题上。着陆几天后,探测器开始周期性地整机复位。事后排查发现:高优先级的"信息总线"任务与低优先级的"气象数据"任务共享一把互斥锁,而中等优先级的通信任务频繁抢占 CPU,使持锁的低优先级任务迟迟跑不完,高优先级任务被长时间间接阻塞;看门狗定时器一看到信息总线任务超时未运行,就复位整机。工程师在地面用同款备份机复现后,远程开启了这把互斥锁的优先级继承(VxWorks 出于性能默认把它关掉了),问题解除。
实时操作系统(RTOS)
通用操作系统(Linux、Windows)为平均性能优化,调度延迟可能达到毫秒量级,不适合硬实时。实时操作系统的设计目标是确定性的低延迟:
- VxWorks:航空、国防领域的工业标准 RTOS(火星探路者号、波音 787 使用)
- QNX:汽车行业主流,BlackBerry 收购后广泛用于车载系统
- FreeRTOS:嵌入式领域最广泛使用的开源 RTOS(2017 年被亚马逊收购)
- Zephyr:Linux 基金会维护,物联网和安全重点
- PREEMPT_RT Linux:将 Linux 内核打实时补丁,使延迟降至微秒级,适合"软硬中间"场景
RTOS 的关键指标: - 中断延迟(Interrupt Latency):从中断信号到 ISR 开始执行的时间 - 任务切换时间(Context Switch Time):从一个任务切换到另一个的时间 - 调度延迟(Scheduling Latency):从任务就绪到实际开始执行的时间
时间触发 vs. 事件触发
时间触发架构(TTA):所有任务按固定时间表执行,不依赖外部事件。极强的确定性,适合硬实时(航空电子 TTP/TTA 协议)。
事件触发架构(ETA):任务在事件发生时触发(中断驱动)。更灵活,但事件风暴(Event Storm)可能导致系统过载。
现代汽车电子是这两种架构共存的典型:安全关键功能(制动、转向)用时间触发,娱乐功能用事件触发。车载网络 FlexRay(时间触发)和 CAN(事件触发)分别服务不同场景。
混合关键性:把不同等级塞进同一颗芯片
传统做法是"物理隔离":关键功能和非关键功能各用一套硬件,互不干扰、各自认证。但芯片越来越强、整合(省体积、省重量、省成本)的诉求越来越高——能不能让一颗处理器同时跑安全关键任务(如飞控)和低关键任务(如地图显示),还互不拖累认证?
这就是混合关键性系统(Mixed-Criticality Systems)。Steve Vestal 在 2007 年的论文里点出了核心矛盾:同一段代码的 WCET,在严格认证标准下估得很保守(偏大),在宽松标准下估得乐观(偏小)。混合关键性调度的思路是平时按乐观估计提高利用率,一旦高关键任务出现超时苗头就切换到"高关键模式",牺牲低关键任务以保住关键任务。
这是过去十几年实时领域最活跃的研究方向之一——Burns 与 Davis 在 2017 年的综述梳理了数百篇相关工作。但争议同样尖锐:认证机构担心"模式切换"本身带来的复杂度难以验证,工业界真正部署的远少于论文数量。理论的优雅与认证的保守,在这里正面相撞。
代价与争议
验证的成本:硬实时系统的软件认证(如 DO-178C 航空软件认证,需要达到 DAL-A 级别)要求为每行代码准备相应的测试覆盖证据,成本极高。据估算,航空软件开发成本约为普通软件的 10-100 倍。
WCET 分析的不可能性:严格来说,现代处理器的 WCET 分析是不可解的(NP 难),实践中只能通过静态分析 + 测量的组合得到保守上界估计。这意味着实时保证本质上是基于保守估计的概率保证,而非数学意义上的绝对保证。
航空 vs. 汽车认证的差距:航空软件(DO-178C)认证非常严格,汽车软件(ISO 26262 ASIL-D)次之。自动驾驶汽车试图在有限成本下实现接近航空级别的安全要求,这一矛盾尚未完全解决。
跨域连接
- 控制论:控制律普遍假设等间隔采样,因此调度抖动等价于在闭环里插入一个变化的时延,会直接侵蚀相位裕度。这解释了正文强调的一件事:即便每次都在截止时间前算完,抖动大的系统仍可能失稳。可检验的推论是——衡量实时性必须同时报告最坏响应时间与时刻偏差分布,只报前者会漏掉一整类失效。
- 计算复杂性:精确的最坏情况执行时间一般不可解,工程上只能给保守上界,而保守是有价格的:上界越松,可用的利用率越低。这把硬件选择变成可推的结论——处理器越是为平均情况优化,乱序执行、缓存与多核干扰越多,上界与实际的差距越大。安全关键领域宁可用行为可预测的旧处理器,买的正是这个差距。
- 过程安全:工业安全同样按失效后果分级,并要求每一级提供相应强度的证据,与航空软件的等级划分是同一套逻辑。关键在于证据量随等级非线性上升,于是把不同关键性的任务塞进同一颗芯片在经济上极诱人。混合关键性受阻的原因也随之清楚:模式切换本身扩大了必须被验证的状态空间。
- 公共政策:同类风险由不同监管体系覆盖时,产业会向要求较低的一侧聚集。航空软件的认证严于汽车,而自动驾驶要在汽车的成本结构下逼近航空级安全,这个落差不是技术问题。推论指向监管改革的方向——按失效后果而非按行业划分等级,否则同样会致命的功能,会因所处行业不同而适用不同门槛。
- 波动与声学:听觉对时间抖动远比对绝对延迟敏感,固定的上百毫秒延迟可以接受,几毫秒的不规则起伏却直接可闻。这决定了音视频链路的取舍方向:宁可加缓冲增加延迟,也要保证等间隔输出。同一条原则适用于电机控制与雷达——凡下游对相位敏感的系统,准时都比快更重要。
参考文献
- Liu, C. & Layland, J. Scheduling Algorithms for Multiprogramming in a Hard-Real-Time Environment. JACM, 1973. (RMS 和 EDF 的奠基论文)
- Burns, A. & Wellings, A. Real-Time Systems and Programming Languages. 4th ed. Addison-Wesley, 2009.
- Buttazzo, G. Hard Real-Time Computing Systems. 3rd ed. Springer, 2011.
- Lions, J. ARIANE 5 Flight 501 Failure: Report by the Inquiry Board. ESA, 1996. (阿丽亚娜 5 事故调查报告原文)
- Sha, L., Rajkumar, R. & Lehoczky, J. Priority Inheritance Protocols: An Approach to Real-Time Synchronization. IEEE Transactions on Computers, 39(9), 1990, pp. 1175–1185. (优先级继承/天花板协议的奠基论文)
- Joseph, M. & Pandya, P. Finding Response Times in a Real-Time System. The Computer Journal, 29(5), 1986, pp. 390–395. (响应时间分析的精确可调度性测试)
- Vestal, S. Preemptive Scheduling of Multi-Criticality Systems with Varying Degrees of Execution Time Assurance. IEEE RTSS, 2007. (混合关键性调度的开创性论文)
- Burns, A. & Davis, R. A Survey of Research into Mixed Criticality Systems. ACM Computing Surveys, 50(6), 2017. (混合关键性十年研究综述)
- Certification Authorities Software Team (CAST). Position Paper CAST-32A: Multi-core Processors. 2016. (多核处理器航空认证指引)