1. 实时系统概述
1.1 实时系统定义
实时系统(Real-Time System)是一类其正确性不仅取决于计算逻辑结果,还取决于结果产生时间的计算机系统。在实时系统中,任务必须在规定的截止时间(Deadline)之前完成,否则系统将视为失效。
核心定义:实时系统 = 逻辑正确性 + 时间确定性。时间约束是实时系统与通用系统最本质的区别。
实时系统的关键特征包括:
- 时间约束性:每个任务都有明确的截止时间,系统必须保证在截止时间前完成。
- 可预测性:系统行为在时间维度上是可预测的,最坏情况执行时间(WCET)可分析。
- 确定性:相同输入在相同条件下产生相同的时间行为。
- 可靠性:系统在长时间运行中保持稳定,不因时间抖动导致失效。
1.2 硬实时与软实时区别
根据错过截止时间的后果严重程度,实时系统分为硬实时(Hard Real-Time)和软实时(Soft Real-Time)两大类。
| 对比维度 | 硬实时(Hard RT) | 软实时(Soft RT) |
|---|---|---|
| 截止时间后果 | 错过截止时间 = 系统灾难性失效 | 错过截止时间 = 性能下降,但系统可继续运行 |
| 典型应用 | 飞行控制、汽车引擎、医疗起搏器、核反应堆 | 音视频播放、网络游戏、人机交互界面 |
| 时间确定性要求 | 100% 确定性,最坏情况必须保证 | 统计确定性,平均性能可接受即可 |
| 调度策略 | 优先级驱动的抢占式调度(如 RMS、EDF) | 优先级调度或时间片轮转 |
| WCET 分析 | 必须进行严格的最坏情况执行时间分析 | 通常不需要严格 WCET 分析 |
| 抖动容忍度 | 微秒级抖动即可能造成失效 | 毫秒级抖动可接受 |
实践要点:在 Linux PREEMPT_RT 的优化场景中,工业控制通常要求硬实时(抖动 < 100μs),而多媒体应用属于软实时(抖动 < 10ms 即可)。PREEMPT_RT 补丁的目标是将 Linux 从 GPOS 提升至接近硬实时的能力。
1.3 实时操作系统(RTOS)与通用操作系统(GPOS)对比
实时操作系统(RTOS)和通用操作系统(GPOS)在设计哲学、调度策略、中断处理等方面存在根本性差异。下表从多个关键维度进行对比:
| 对比维度 | RTOS(实时操作系统) | GPOS(通用操作系统) |
|---|---|---|
| 设计目标 | 时间确定性、可预测性 | 吞吐量最大化、公平性 |
| 调度策略 | 优先级抢占式调度(固定/动态优先级) | 完全公平调度(CFS)、时间片轮转 |
| 中断延迟 | 微秒级(μs),可预测 | 毫秒级(ms),受内核非抢占区影响 |
| 内核抢占性 | 完全可抢占,中断嵌套支持 | 有限抢占(PREEMPT_NONE/VOLUNTARY) |
| 优先级反转 | 通过优先级继承/天花板协议避免 | 可能发生,依赖锁机制处理 |
| 内存管理 | 通常无 MMU 或静态分配 | 虚拟内存、按需分页、交换 |
| 典型代表 | FreeRTOS、VxWorks、QNX、RT-Linux | Linux、Windows、macOS |
| 应用场景 | 工业控制、航空航天、医疗设备 | 桌面计算、服务器、移动设备 |
关键认知:Linux 内核本质上是 GPOS,其设计优先考虑吞吐量和公平性。PREEMPT_RT 补丁通过引入完全内核抢占、中断线程化、高精度定时器等技术,将 Linux 改造为接近 RTOS 的实时能力,但并非真正的 RTOS 内核。
1.4 Linux 实时化路径:PREEMPT_RT 的定位
Linux 内核社区提供了多种实时化方案,其中 PREEMPT_RT 是最主流、最成熟的路径。其核心思路是通过一系列补丁,将 Linux 内核从 GPOS 改造为具备硬实时能力的系统。
PREEMPT_RT 的关键技术包括:
- 完全内核抢占(Full Preemption):将内核中的自旋锁替换为可睡眠的互斥锁,使内核几乎处处可抢占。
- 中断线程化(IRQ Threading):将硬件中断处理程序转换为内核线程,降低中断延迟对实时任务的影响。
- 高精度定时器(HRT):使用高精度定时器框架替代传统定时器,提供微秒级定时精度。
- 优先级继承协议(PI):在互斥锁中实现优先级继承,避免优先级反转问题。
课程定位:本课程将深入分析 PREEMPT_RT 补丁的增量更新机制,讲解如何通过内核补丁方式逐步优化 Linux 的实时性能,最终达到工业级硬实时要求(抖动 < 50μs)。