概述
实时计算指硬件和软件系统受”实时约束”,从事件到系统响应必须在严格的时间限制(deadline)内完成。正确性不仅取决于逻辑结果,还取决于完成时间。
实时系统的核心要求是一致的输出,而非高吞吐量。
实时系统分类
| 类型 | 描述 | 例子 |
|---|---|---|
| 硬实时(Hard) | 错过deadline = 系统完全失效 | 汽车引擎控制、防抱死刹车、心脏起搏器 |
| 稳实时(Firm) | 偶尔错过deadline可容忍,但结果无价值 | 偶尔出错的装配线机器 |
| 软实时(Soft) | 结果在deadline后降质,但系统仍可运行 | 视频游戏、航班计划更新、视频会议 |
实时操作系统(RTOS)
实时软件可使用:
- 同步编程语言(Synchronous programming languages)
- 实时操作系统(RTOS)
- 实时网络
RTOS特征
- 优先级驱动调度:通常为抢占式(preemptive)
- 确定性调度:任务切换时间可预测
- 支持前景/后台调度:低优先级任务在无高优先级任务时运行
常见RTOS
- VxWorks
- FreeRTOS
- QNX
- RTLinux(硬实时扩展)
调度算法
Rate-Monotonic Scheduling(速率单调调度)
- 属于固定优先级调度
- 需要已知每个任务的最坏执行时间
- 任务周期越短,优先级越高
- 可用性条件:,其中为任务数
Earliest Deadline First(最早截止时间优先)
- 属于动态优先级调度
- 忽略上下文切换开销时,系统负载 即可保证所有deadline被满足
- 更灵活但实现复杂度高
其他调度算法
| 算法 | 类型 | 特点 |
|---|---|---|
| Round Robin | 固定 | 时间片轮转,适合交互系统 |
| FIFO | 固定 | 先来先服务,最简单 |
| Multilevel Feedback Queue | 混合 | 兼顾响应时间和吞吐量 |
优先级反转问题
定义
优先级反转是实时系统调度中的一种现象:高优先级任务被低优先级任务间接抢占,违反了优先级模型。发生在共享资源争用时——低优先级任务持有锁,高优先级任务因此阻塞。
经典场景
- 低优先级任务 L 获取共享资源 R
- 中优先级任务 M 就绪,抢占 L
- L 无法释放 R,导致高优先级任务 H 被阻塞
Mars Pathfinder案例1
1997年火星探路者号着陆器因优先级反转导致系统复位:
- 高优先级气象任务等待一个被低优先级气象任务持有的信号量
- 中优先级的通信任务抢占低优先级任务
- 高优先级任务长期饥饿,触发看门狗定时器复位系统
优先级继承与天花板协议
优先级继承(Priority Inheritance)
当高优先级任务等待低优先级任务持有的资源时,临时将低优先级任务的优先级提升到所有等待者中的最高优先级,直至释放资源后恢复原优先级。
这一机制阻止了中等优先级任务抢占原本持有锁的低优先级任务。
优先级天花板协议(Priority Ceiling Protocol)
互斥锁本身被赋予一个”天花板优先级”(通常为系统中最高优先级),任何尝试获取该锁的任务继承这一优先级。
只要持有锁的任务优先级不低于天花板优先级,就不会发生反转。适用于所有访问该锁的任务优先级都低于天花板的情况。
比较
| 特性 | 优先级继承 | 优先级天花板 |
|---|---|---|
| 触发时机 | 阻塞发生时 | 获取锁时 |
| 复杂度 | 中等 | 较高 |
| 保障 | 阻止无限阻塞 | 根本防止优先级反转 |
实时系统的其他关键概念
上下文切换开销
任务切换需要保存/恢复寄存器、缓存等,开销不可忽视。实时调度分析必须考虑这一因素。
中断延迟
从硬件中断到中断服务程序(ISR)执行的时间,是实时系统的重要指标。
抖动(Jitter)
任务执行时间的变化范围。对于硬实时系统,抖动必须被严格控制。
应用场景
| 领域 | 实时要求 | 示例 |
|---|---|---|
| 汽车电子 | 硬实时 | 防抱死刹车、安全气囊 |
| 航空航天 | 硬实时 | 飞行控制系统 |
| 工业自动化 | 硬/稳实时 | PLC控制、机器人 |
| 多媒体 | 软实时 | 视频播放、音视频同步 |
| 网络游戏 | 软实时 | 多人对战 |
参考资料
Footnotes
-
Glenn Reeves, What Really Happened on Mars, JPL Pathfinder team ↩