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 实时系统关键指标关系图

下图展示了实时系统中延迟、抖动与吞吐量之间的内在关系,以及中断线程化在其中的作用位置:

实时系统关键指标与中断线程化作用关系 外部事件 延迟 (Latency) 中断关闭时间 调度器切换延迟 自旋锁等待 抖动 (Jitter) 延迟波动范围 max - min 可预测性指标 吞吐量 任务完成率 单位时间处理量 与延迟权衡 中断线程化(Interrupt Threading) 将中断处理程序下半部变为可被实时调度器管理的内核线程,降低中断关闭时间 工程落地关键 • 中断线程化直接降低延迟和抖动,但可能轻微影响吞吐量 • 硬实时场景优先保证延迟和抖动,软实时场景可适当放宽

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内核中中断处理机制的历史演进,以及为什么传统中断模型无法满足实时需求。