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内核主要面向硬实时场景,但也能显著改善软实时系统的延迟表现。
1.3 实时调度器需求
实时调度器是实时操作系统的核心组件,负责决定哪个任务在何时获得CPU执行权。一个合格的实时调度器必须满足以下关键需求:
- 可预测性(Predictability):调度行为必须确定且可分析,不能依赖随机或启发式算法。
- 优先级管理:支持明确的优先级层次,高优先级任务必须能够抢占低优先级任务。
- 有限阻塞时间:任务因等待资源(锁、信号量)而被阻塞的时间必须有上界。
- 优先级反转控制:必须提供机制(如优先级继承、优先级天花板)防止优先级反转导致不可预测的延迟。
- 低调度开销:调度决策本身消耗的时间应尽可能短且恒定。
- 中断响应及时性:从中断发生到中断处理程序开始执行的时间(中断延迟)必须可控。
PREEMPT_RT 核心价值:标准Linux内核的调度器(CFS)主要面向吞吐量和公平性,而PREEMPT_RT通过引入完全可抢占内核、实时优先级调度类(SCHED_FIFO/SCHED_RR)以及优先级继承机制,使Linux满足硬实时调度器的全部需求。
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虽然强大,但其调度逻辑与优先级继承的交互更为复杂,将在进阶章节中涉及。
1.6 本章小结
实时系统的基础知识是理解PREEMPT_RT内核优先级继承机制的必要前提。本章明确了:
- 实时系统的核心是时间正确性与逻辑正确性同等重要。
- 硬实时与软实时的根本区别在于错过截止时间的后果严重程度,这决定了调度策略和内核配置的选择。
- 实时调度器必须满足可预测性、优先级管理、有限阻塞、优先级反转控制、低开销和中断响应及时性六大需求。
- PREEMPT_RT内核通过完全可抢占、中断线程化、实时调度类和优先级继承等机制,使Linux从软实时系统升级为可认证的硬实时系统。