1. 实时系统概述

1.1 实时系统的定义

实时系统(Real-Time System)是一类其正确性不仅取决于计算结果的逻辑正确性,还取决于结果产生的时间的计算系统。在实时系统中,任务必须在规定的截止时间(Deadline)之前完成,否则系统将被视为失效。

核心定义:实时系统 = 逻辑正确性 + 时间正确性。两者缺一不可。

实时系统广泛存在于嵌入式控制、工业自动化、航空航天、汽车电子、医疗设备、机器人等领域。例如:

  • 汽车安全气囊控制器:必须在碰撞发生后 10ms 内触发气囊弹出。
  • 工业机器人关节控制:每个控制周期必须在 1ms 内完成位置/力矩计算与输出。
  • 飞行控制系统:传感器采样、控制律计算、舵机指令必须在固定周期内完成。
实时系统基本模型 传感器 物理世界采样 采样数据 实时计算单元 控制算法/逻辑处理 控制指令 执行器 物理世界响应 ⏱ 时间约束:必须在截止时间前完成 采样 → 计算 → 输出 全链路延迟可控 反馈控制回路(闭环)

1.2 硬实时与软实时的区别

根据错过截止时间后系统行为的严重程度,实时系统分为硬实时(Hard Real-Time)和软实时(Soft Real-Time)两大类。

对比维度 硬实时(Hard RT) 软实时(Soft RT)
截止时间违反后果 系统灾难性失效(人员伤亡、设备损毁) 服务质量下降,但系统仍可运行
典型应用 安全气囊、飞行控制、心脏起搏器 视频播放、音频处理、网络通信
时间确定性要求 必须 100% 满足最坏情况截止时间 统计意义上满足即可(如 99.9%)
调度策略 优先级抢占、时间触发、速率单调 优先级调度、公平调度、EDF
内核需求 完全可抢占、中断线程化、优先级继承 普通抢占式内核即可
典型延迟要求 微秒级(1-100 µs) 毫秒级(1-100 ms)
工程经验:在 Linux 实时化改造中,硬实时场景必须使用 PREEMPT_RT 补丁或专用 RTOS;软实时场景可考虑使用 PREEMPT_DYNAMIC 或 CFS 调度器调优。
硬实时 vs 软实时:截止时间违反行为对比 硬实时系统 任务在截止时间前完成 ✅ 正常 任务错过截止时间 ❌ 系统失效 软实时系统 任务在截止时间前完成 ✅ 正常 任务错过截止时间 ⚠️ 质量下降

1.3 实时操作系统的关键指标

评估一个实时操作系统(RTOS)的性能,主要关注以下三个核心指标:延迟(Latency)、抖动(Jitter)和吞吐量(Throughput)。

1.3.1 延迟(Latency)

延迟是指从事件发生到系统开始响应之间的时间间隔。在实时系统中,延迟通常包括:

  • 中断延迟:从硬件中断触发到中断服务程序(ISR)开始执行的时间。
  • 调度延迟:从任务就绪到任务实际获得 CPU 执行的时间。
  • 抢占延迟:高优先级任务就绪后,抢占当前低优先级任务所需的时间。
  • 上下文切换延迟:保存/恢复任务上下文的时间开销。
PREEMPT_RT 核心目标:将 Linux 内核的最坏情况抢占延迟从普通内核的 10-100ms 降低到 100µs 以下,实现可预测的实时响应。

1.3.2 抖动(Jitter)

抖动是指延迟的变化程度,即实际延迟与期望延迟之间的偏差。抖动是衡量系统时间确定性的关键指标。

抖动类型 定义 对实时系统的影响
周期抖动 任务实际执行周期与理想周期的偏差 导致采样/控制周期不均匀,影响控制精度
延迟抖动 响应延迟的最大值与最小值之差 影响系统最坏情况分析(WCET)的准确性
调度抖动 任务调度时间点的不确定性 导致多任务协同出现时序偏差

1.3.3 吞吐量(Throughput)

吞吐量是指系统在单位时间内能够处理的任务数量或数据量。在实时系统中,吞吐量与实时性之间存在权衡关系:

  • 高实时性通常意味着更频繁的上下文切换和抢占,这会降低吞吐量。
  • 高吞吐量通常意味着更长的任务连续执行时间,这会增加抢占延迟。
工程权衡:在 PREEMPT_RT 系统中,实时性优先于吞吐量。如果应用场景对吞吐量有极高要求(如批处理、大数据),建议使用非实时内核或通过 CPU 隔离(isolcpus)将实时任务与批处理任务分离。
实时系统关键指标:延迟、抖动、吞吐量 延迟(Latency) 中断延迟 调度延迟 抢占延迟 上下文切换延迟 抖动(Jitter) 周期抖动 延迟抖动 调度抖动 WCET 不确定性 吞吐量(Throughput) 任务处理速率 数据吞吐率 CPU 利用率 上下文切换开销 ⚖️ 实时系统设计权衡 低延迟 ↔ 高抖动 ↔ 低吞吐量 | 高吞吐量 ↔ 高延迟 ↔ 低确定性

1.4 实时系统在 Linux 中的实现路径

Linux 内核从通用操作系统向实时操作系统的演进,经历了以下几个关键阶段:

  1. 标准 Linux 内核:非抢占式内核(PREEMPT_NONE),调度延迟可达 100ms 以上。
  2. 低延迟补丁(-ck / BFS):通过改进调度器减少延迟,但仍无法满足硬实时要求。
  3. PREEMPT_RT 补丁:实现内核完全可抢占、中断线程化、高精度定时器、优先级继承等机制,将最坏情况延迟降至 100µs 以下。
  4. PREEMPT_DYNAMIC(Linux 5.12+):允许在运行时动态切换抢占模式(NONE / VOLUNTARY / FULL),兼顾实时性与吞吐量。
课程路线图:本课程将深入剖析 PREEMPT_RT 补丁的抢占点配置机制,包括中断线程化、可抢占内核锁、RCU 抢占优化、高精度定时器、优先级继承等核心技术,并结合工程实践给出配置建议。
Linux 实时化演进路径 标准内核 PREEMPT_NONE 低延迟补丁 -ck / BFS PREEMPT_RT 完全可抢占 PREEMPT_DYNAMIC 运行时切换 延迟 > 100ms 延迟 ~ 10ms 延迟 < 100µs 动态可调

1.5 本章小结

  • 实时系统要求任务在规定的截止时间前完成,时间正确性与逻辑正确性同等重要。
  • 硬实时错过截止时间会导致灾难性后果,软实时则仅影响服务质量。
  • 实时系统的三大关键指标:延迟(响应速度)、抖动(时间确定性)、吞吐量(处理能力),三者之间存在工程权衡。
  • Linux 通过 PREEMPT_RT 补丁实现了内核完全可抢占,是构建硬实时 Linux 系统的事实标准。