1. 实时系统基础

1.1 实时系统定义

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

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

实时系统广泛应用于对时间确定性要求极高的领域,包括但不限于:

  • 航空航天:飞行控制系统、导航系统
  • 汽车电子:发动机控制、制动系统(ABS/ESP)
  • 工业自动化:PLC、机器人控制、运动控制
  • 医疗设备:心脏起搏器、输液泵、医学影像
  • 通信系统:基站信号处理、网络路由
实时系统基本模型 外部事件输入 实时任务处理 控制输出 截止时间约束 反馈控制回路(闭环实时系统)

1.2 硬实时与软实时区别

根据错过截止时间造成的后果严重程度,实时系统分为硬实时和软实时两大类。理解这一区别是选择实时调度策略和配置内核参数的前提。

对比维度 硬实时(Hard Real-Time) 软实时(Soft Real-Time)
截止时间后果 错过截止时间 = 系统灾难(人员伤亡、设备损坏) 错过截止时间 = 性能下降,但系统仍可运行
确定性要求 必须100%保证最坏情况执行时间(WCET) 统计意义上满足即可(平均延迟可接受)
典型应用 飞行控制、安全气囊、心脏起搏器 音视频播放、网络游戏、人机交互
调度策略 优先级驱动、时间触发、预留资源 尽力而为、比例调度、公平调度
内核要求 必须使用PREEMPT_RT或专用RTOS 标准Linux内核通常可满足
测试验证 形式化验证 + 最坏情况分析 统计测试 + 经验调优
重要区分:硬实时系统要求确定性(Determinism),即任务响应时间的上界必须可预测且严格保证;软实时系统追求低延迟(Low Latency),但允许偶发的延迟抖动。PREEMPT_RT内核主要面向硬实时场景,但也能显著改善软实时系统的延迟表现。
硬实时 vs 软实时:截止时间错过后果对比 硬实时:错过截止时间 = 系统失效 任务到达 截止时间 实际完成 超时! ⚠ 灾难性后果 软实时:错过截止时间 = 质量下降 任务到达 截止时间 实际完成 延迟 ⚠ 服务质量下降

1.3 实时调度器需求

实时调度器是实时操作系统的核心组件,负责决定哪个任务在何时获得CPU执行权。一个合格的实时调度器必须满足以下关键需求:

  1. 可预测性(Predictability):调度行为必须确定且可分析,不能依赖随机或启发式算法。
  2. 优先级管理:支持明确的优先级层次,高优先级任务必须能够抢占低优先级任务。
  3. 有限阻塞时间:任务因等待资源(锁、信号量)而被阻塞的时间必须有上界。
  4. 优先级反转控制:必须提供机制(如优先级继承、优先级天花板)防止优先级反转导致不可预测的延迟。
  5. 低调度开销:调度决策本身消耗的时间应尽可能短且恒定。
  6. 中断响应及时性:从中断发生到中断处理程序开始执行的时间(中断延迟)必须可控。
PREEMPT_RT 核心价值:标准Linux内核的调度器(CFS)主要面向吞吐量和公平性,而PREEMPT_RT通过引入完全可抢占内核、实时优先级调度类(SCHED_FIFO/SCHED_RR)以及优先级继承机制,使Linux满足硬实时调度器的全部需求。
实时调度器核心需求架构 实时调度器 Real-Time Scheduler ① 可预测性 ② 优先级管理 ③ 有限阻塞时间 ④ 优先级反转控制 ⑤ 低调度开销 ⑥ 中断响应及时性 PREEMPT_RT 内核通过完全可抢占 + 优先级继承 + 实时调度类满足以上所有需求 标准Linux CFS调度器仅满足⑤,部分满足②,其他需求需要PREEMPT_RT补丁

1.4 实时系统中的关键时间指标

评估实时系统性能时,以下时间指标是核心度量标准:

指标名称 定义 典型要求(硬实时) PREEMPT_RT典型值
中断延迟 从硬件中断触发到中断处理程序第一条指令执行的时间 < 10 µs 5-15 µs
调度延迟 从任务变为就绪到任务开始执行的时间 < 100 µs 10-50 µs
上下文切换时间 CPU从一个任务切换到另一个任务所需的时间 < 5 µs 1-3 µs
最坏情况执行时间(WCET) 任务在所有可能输入和系统状态下执行的最大时间 必须可证明 需结合cyclictest测量
抖动(Jitter) 任务实际完成时间与期望完成时间的偏差 < 50 µs 10-30 µs
PREEMPT_RT 优化目标:将标准Linux内核的中断延迟从毫秒级(1-10ms)降低到微秒级(5-15µs),同时保证调度延迟和抖动在可控范围内。这是通过将中断线程化、自旋锁可抢占、以及优先级继承等机制实现的。

1.5 实时调度策略分类

Linux内核(尤其是PREEMPT_RT)支持以下实时调度策略:

  • SCHED_FIFO(先入先出调度):相同优先级的任务按队列顺序执行,高优先级任务可抢占低优先级任务。适用于需要严格优先级控制的硬实时任务。
  • SCHED_RR(轮转调度):与SCHED_FIFO类似,但相同优先级的任务按时间片轮转执行。适用于需要公平分配CPU时间的软实时任务。
  • SCHED_DEADLINE(截止时间调度):基于Earliest Deadline First(EDF)算法,任务指定运行时间/周期/截止时间,内核保证在截止时间前完成。适用于周期性硬实时任务。
课程聚焦:本课程后续章节将重点讨论SCHED_FIFO和SCHED_RR下的优先级继承机制,因为这是解决实时系统中优先级反转问题的关键手段。SCHED_DEADLINE虽然强大,但其调度逻辑与优先级继承的交互更为复杂,将在进阶章节中涉及。
Linux实时调度策略对比 SCHED_FIFO 先入先出 + 优先级抢占 高优先级任务立即抢占 相同优先级按队列顺序 无时间片轮转 适用:硬实时控制 SCHED_RR 轮转 + 优先级抢占 高优先级任务立即抢占 相同优先级时间片轮转 默认时间片100ms 适用:软实时多媒体 SCHED_DEADLINE EDF算法 指定运行时间/周期/截止时间 内核保证截止时间 带宽隔离机制 适用:周期性硬实时

1.6 本章小结

实时系统的基础知识是理解PREEMPT_RT内核优先级继承机制的必要前提。本章明确了:

  • 实时系统的核心是时间正确性与逻辑正确性同等重要。
  • 硬实时与软实时的根本区别在于错过截止时间的后果严重程度,这决定了调度策略和内核配置的选择。
  • 实时调度器必须满足可预测性、优先级管理、有限阻塞、优先级反转控制、低开销和中断响应及时性六大需求。
  • PREEMPT_RT内核通过完全可抢占、中断线程化、实时调度类和优先级继承等机制,使Linux从软实时系统升级为可认证的硬实时系统。