1. 实时系统概述
实时系统(Real-Time System)的核心特征在于其正确性不仅依赖于计算结果的逻辑正确性,还依赖于结果产生的时间正确性。在嵌入式 Linux 开发中,理解实时系统的定义、分类以及与通用操作系统的差异,是正确应用 PREEMPT_RT 补丁的前提。
1.1 实时系统定义
实时系统是指系统必须在确定的时间约束内对外部事件做出响应的计算系统。时间约束通常以截止时间(Deadline)的形式定义。如果系统不能在截止时间之前完成指定的任务,即使计算结果在逻辑上是正确的,也被视为系统失效。
关键指标:实时系统的性能通常用最差情况执行时间(WCET, Worst-Case Execution Time)和响应时间(Response Time)来衡量。WCET 是任务在最不利条件下完成所需的最大时间,响应时间是从事件触发到任务完成的总耗时。
1.2 硬实时与软实时区别
根据错过截止时间的后果严重程度,实时系统分为硬实时(Hard Real-Time)和软实时(Soft Real-Time)两类。PREEMPT_RT 补丁主要面向硬实时场景,但也能显著改善软实时系统的抖动表现。
| 对比维度 | 硬实时(Hard RT) | 软实时(Soft RT) |
|---|---|---|
| 截止时间后果 | 错过即系统失效,可能导致灾难 | 错过降低服务质量,系统仍可运行 |
| 典型应用 | 飞行控制、汽车引擎、医疗起搏器 | 音视频播放、网络路由、游戏引擎 |
| WCET 要求 | 必须严格保证,需形式化验证 | 统计保证,允许偶发超时 |
| 调度策略 | 优先级抢占、时间触发 | 优先级调度、公平调度 |
| PREEMPT_RT 适用性 | 核心目标场景 | 受益明显,抖动降低 |
1.3 实时操作系统(RTOS)与通用操作系统(GPOS)对比
通用操作系统(如标准 Linux、Windows)的设计目标是平均性能最大化和多用户公平性,而实时操作系统(如 VxWorks、QNX、RT-Linux)的设计目标是时间确定性和最差情况性能可预测。PREEMPT_RT 补丁的目标正是将通用 Linux 内核改造为具有 RTOS 特性的实时内核。
| 对比维度 | 通用操作系统(GPOS) | 实时操作系统(RTOS) |
|---|---|---|
| 调度目标 | 公平性、吞吐量最大化 | 截止时间满足、可预测性 |
| 抢占粒度 | 内核不可抢占或有限抢占 | 完全可抢占,中断延迟极低 |
| 中断延迟 | 毫秒级(受关中断影响) | 微秒级(中断嵌套优先级) |
| 优先级反转 | 可能发生,无内置保护 | 优先级继承/天花板协议 |
| 内存管理 | 虚拟内存、按需分页、写时复制 | 常驻内存、避免缺页中断 |
| 锁机制 | 自旋锁、读写锁(可睡眠) | 优先级继承互斥锁、无锁队列 |
| 典型代表 | 标准 Linux、Windows、macOS | VxWorks、QNX、RT-Linux(PREEMPT_RT) |
1.4 为什么选择 PREEMPT_RT?
PREEMPT_RT 补丁将标准 Linux 内核改造为硬实时内核,主要解决以下 GPOS 痛点:
- 内核抢占性不足:标准 Linux 内核在执行系统调用时不可抢占,导致高优先级实时任务被低优先级内核路径阻塞。
- 中断延迟不可控:关中断区域(如 spin_lock_irqsave)导致中断响应延迟抖动。
- 优先级反转:低优先级任务持有高优先级任务所需的锁,导致高优先级任务被阻塞。
- 时钟精度低:标准 Linux 的定时器 tick 周期为 1ms~10ms,无法满足微秒级定时需求。
实战提示:PREEMPT_RT 补丁并非万能。它主要解决内核抢占和中断延迟问题,但无法消除应用程序自身的设计缺陷(如长时间关中断、死循环、不合理的内存分配)。在后续章节中,我们将通过配置和测试工具验证实时性改善效果。
1.5 实时系统性能指标速查
| 指标 | 定义 | PREEMPT_RT 典型值 |
|---|---|---|
| 中断延迟 | 从硬件中断触发到 ISR 开始执行的时间 | < 15 µs(x86_64) |
| 调度延迟 | 从任务就绪到获得 CPU 的时间 | < 50 µs |
| 上下文切换时间 | 从一个任务切换到另一个任务的时间 | < 5 µs |
| 时钟分辨率 | 定时器能够设置的最小时间间隔 | 1 µs(高精度定时器) |
| 抖动(Jitter) | 实际响应时间与期望响应时间的偏差 | < 20 µs |