1.1 实时系统基础
实时系统(Real-Time System)是指系统必须在确定的时间范围内对外部事件做出响应的计算系统。其正确性不仅取决于计算结果的逻辑正确性,还取决于结果产生的时间。在嵌入式、工业控制、航空航天、自动驾驶等领域,实时性是系统设计的核心约束。
1.1.1 实时系统的定义与核心特征
一个实时系统通常包含以下三个核心特征:
- 时间确定性(Determinism):系统行为在时间维度上是可预测的,任务的最坏情况执行时间(WCET, Worst-Case Execution Time)可被分析。
- 响应时限(Deadline):每个任务都有一个明确的完成截止时间,系统必须保证在该时间之前完成处理。
- 可调度性(Schedulability):在给定的任务集和资源约束下,系统能够保证所有任务满足其时限要求。
关键区分:实时系统 ≠ 快速系统。一个“快”但不确定的系统(如通用Linux)可能偶尔在1ms内响应,但最坏情况下可能延迟到100ms;而一个实时系统可能平均响应为10ms,但最坏情况保证在15ms以内。确定性比平均性能更重要。
1.1.2 硬实时与软实时
根据错过截止时间(Deadline Miss)对系统的影响程度,实时系统分为硬实时(Hard Real-Time)和软实时(Soft Real-Time)两类。下表列出了两者的核心区别:
| 对比维度 | 硬实时(Hard RT) | 软实时(Soft RT) |
|---|---|---|
| 截止时间错过后果 | 系统灾难或功能失效(如安全气囊未弹出) | 服务质量下降,但系统仍可运行(如视频丢帧) |
| 时间保证要求 | 必须100%满足最坏情况时限 | 统计意义上满足即可(如99.9%的响应在时限内) |
| 典型应用 | 航空电子、心脏起搏器、工业PLC | 音视频播放、网络游戏、人机交互 |
| 调度策略倾向 | 优先级抢占 + 资源预留 | 优先级调度 + 尽力而为 |
| Linux实时化目标 | 通过PREEMPT_RT补丁逼近硬实时 | 内核默认配置即可满足大部分软实时需求 |
工程误区:很多开发者认为“只要CPU够快,软实时就能变成硬实时”。实际上,硬实时要求的是最坏情况下的确定性,而非平均性能。即使CPU频率提升10倍,如果中断关闭(IRQ off)时间没有缩短,硬实时保证依然无法达成。
1.1.3 实时操作系统关键指标
评估一个实时操作系统(RTOS)或实时化方案(如Linux + PREEMPT_RT)的性能,主要关注以下三个指标:
- 延迟(Latency):从事件发生到系统开始处理该事件的时间间隔。在Linux中,延迟主要由中断关闭时间、调度器延迟、自旋锁持有时间等构成。
- 抖动(Jitter):延迟的波动范围,即最大延迟与最小延迟之差。低抖动意味着系统行为高度可预测,是实时系统稳定性的关键。
- 吞吐量(Throughput):单位时间内系统能够处理的任务数量。实时系统通常需要在保证延迟和抖动的前提下,最大化吞吐量。
下表给出了这三个指标在典型场景下的对比:
| 指标 | 定义 | 通用Linux典型值 | 实时Linux(PREEMPT_RT)典型值 | 对实时性的影响 |
|---|---|---|---|---|
| 延迟 | 事件 → 任务开始执行 | 10 ~ 1000 μs | 5 ~ 50 μs | 决定系统能否满足短时限任务 |
| 抖动 | 最大延迟 - 最小延迟 | 100 ~ 5000 μs | 1 ~ 20 μs | 决定系统时间行为的可预测性 |
| 吞吐量 | 任务完成数 / 单位时间 | 高(无实时开销) | 略低(约5%~15%性能损失) | 在实时保证与性能之间权衡 |
1.1.4 实时系统关键指标关系图
下图展示了实时系统中延迟、抖动与吞吐量之间的内在关系,以及中断线程化在其中的作用位置:
1.1.5 实时性对Linux内核的挑战
通用Linux内核在设计之初主要优化吞吐量和公平性,而非实时确定性。其核心问题包括:
- 中断不可抢占:传统Linux的中断处理程序(ISR)运行在关中断上下文中,不能被其他任务抢占,导致高优先级实时任务被阻塞。
- 自旋锁持有期间禁止抢占:自旋锁(spinlock)在SMP系统中持有期间会关闭本地CPU的抢占,导致延迟不可控。
- 软中断(softirq)和tasklet:这些机制在中断上下文中执行,不受调度器管理,无法保证实时优先级。
- 大内核锁(BKL)遗留:虽然BKL已被移除,但部分驱动和子系统仍存在长临界区问题。
课程核心线索:中断线程化正是为了解决上述第1个和第3个问题而引入的机制——将中断处理程序的下半部(以及部分上半部)转化为可被实时调度器管理的内核线程,从而让高优先级实时任务能够抢占中断处理流程,大幅降低最坏情况延迟。
1.1.6 实时系统分类总结表
| 分类 | 时限错过后果 | 典型应用 | Linux实时化方案 |
|---|---|---|---|
| 硬实时 | 系统失效或灾难 | 航空电子、医疗设备、工业控制 | PREEMPT_RT + 中断线程化 + 优先级继承 |
| 软实时 | 服务质量下降 | 音视频、游戏、网络协议栈 | 内核默认配置 + 实时调度策略(SCHED_FIFO/RR) |
| 准实时(Firm RT) | 偶尔错过可接受,但频繁错过不可接受 | 电信基站、雷达信号处理 | PREEMPT_RT + 资源预留 + 调度优化 |
理解上述基础概念后,我们将进入第2章,深入分析Linux内核中中断处理机制的历史演进,以及为什么传统中断模型无法满足实时需求。