在机器人、智能制造、工业控制以及边缘计算快速发展的今天,一个嵌入式计算平台正在承担越来越多的任务。

过去,一台控制器可能只需要完成一个简单的闭环控制:

采集传感器数据
        ↓
控制算法
        ↓
输出执行指令

而现在,一台机器人控制器或者智能设备往往同时需要完成:

实时运动控制
实时数据采集
工业通信
AI推理
视觉处理
路径规划
设备管理
网络通信
日志记录
人机交互

问题也随之出现:

这些任务能不能全部放在Linux上运行?

如果可以,Linux又如何保证AI推理、视觉处理、网络通信这些计算量很大的任务,不会影响最关键的实时控制任务?

例如一个机器人系统中:

AI视觉任务
↓
计算量大、负载波动明显

路径规划任务
↓
计算量中等、周期不完全固定

运动控制任务
↓
1ms周期、实时性要求高

安全监控任务
↓
需要快速响应

如果这些任务全部运行在同一个操作系统中,传统的“所有任务共享CPU资源”的方式就会面临一个非常现实的问题:

AI任务可能需要大量CPU资源,而控制任务却要求稳定、确定的执行时间。

这两个需求天然存在差异。

AI更关心吞吐量:

一秒钟能够处理多少数据?

实时控制更关心确定性:

最晚什么时候必须完成?

普通Linux应用可能更关心:

系统功能是否稳定、网络是否正常、文件是否可用?

而安全相关任务可能关心:

关键任务受到其他任务影响时,能不能保持正常运行?

这就是近年来实时Linux架构中越来越重要的一个概念:

混合关键性系统(Mixed-Criticality System)。

所谓混合关键性,并不是简单地把“高优先级任务”和“低优先级任务”放在一起,而是指:

同一计算平台上,同时运行具有不同实时等级、可靠性要求和资源约束的任务。

这也意味着,实时操作系统的发展正在从“让一个任务跑得更快”,逐渐走向:

让不同类型的任务在同一个系统中安全、可预测地共存。

对于望获OS这样的国产实时操作系统而言,这正是核心隔离、实时调度和系统资源管理能够真正体现价值的地方。


一、为什么AI和硬实时控制天然存在冲突?两个任务追求的“快”根本不是一回事

理解混合关键性系统之前,首先要弄清楚一个非常容易被忽略的问题:

AI计算和实时控制虽然都需要高性能,但它们对“性能”的定义完全不同。

例如一个视觉AI任务:

摄像头
  ↓
图像采集
  ↓
预处理
  ↓
AI推理
  ↓
目标检测
  ↓
结果输出

它可能需要持续处理大量数据。

假设:

一帧图像
→ 10ms处理完成

通常并不意味着系统失败。

即使某些帧:

10ms
12ms
15ms
9ms
13ms

对于很多AI应用来说,只要整体吞吐量和平均响应仍然满足需求,系统可能依然可以正常工作。

但实时控制完全不同。

假设机器人运动控制周期是:

1ms

那么:

第1次:1.0ms
第2次:1.1ms
第3次:1.0ms
第4次:3.0ms

即使前三次表现很好,只要某一次超过系统允许的最大延迟,就可能产生明显影响。

所以:

AI更强调平均性能和吞吐量。

硬实时控制更强调最坏情况响应和确定性。

可以简单做一个对比:

类型主要关注点对延迟的要求
AI推理吞吐量、平均响应可以存在一定波动
网络通信吞吐量、平均延迟通常允许一定抖动
日志任务数据完整性通常不是严格实时
普通控制响应速度有一定实时要求
硬实时控制最坏情况延迟必须严格控制
安全监控响应上界需要确定性

这意味着,如果把所有任务都放进一个完全共享的执行环境:

CPU
│
├── AI
├── 网络
├── 日志
├── 文件系统
├── 控制
└── 安全任务

那么最大的风险并不是CPU性能不够。

真正的问题是:

不同任务可能互相干扰。

例如AI任务突然出现计算峰值:

AI负载
    ↑
    │       ███████████
    │       ███████████
    │ █████████████████
────┴────────────────────

此时如果控制任务与AI任务共享同一个CPU核心,控制任务可能出现:

正常:
1ms
1ms
1ms
1ms

受到干扰:
1ms
1ms
2ms
1ms

如果只是偶尔出现,那么问题可能还不明显。

但如果系统越来越复杂,任务数量不断增加,影响实时性的因素就会越来越多:

AI计算
网络中断
磁盘I/O
文件系统
内核线程
日志
动态内存
锁竞争
设备驱动

最终系统的最坏情况延迟越来越难以分析。

因此,混合关键性系统真正要解决的问题并不是:

“如何让所有任务都跑得一样快?”

而是:

如何让不同重要程度的任务,在共享一个计算平台时互不产生不可接受的影响?

这就引出了整个问题的核心:

隔离。


二、为什么“分任务”还不够?真正需要隔离的是CPU、内存、中断和内核活动

很多人第一次面对这个问题时,会想到一个非常直接的方法:

“那就给实时任务设置一个更高的优先级。”

例如:

AI任务:Priority 30
普通任务:Priority 20
控制任务:Priority 90
安全任务:Priority 95

看起来问题解决了。

因为:

安全任务 > 控制任务 > AI任务 > 普通任务

但是上一篇关于优先级反转的文章已经说明:

仅仅设置优先级并不能保证实时性。

因为任务之间还存在:

锁
中断
内核线程
共享CPU
共享缓存
共享内存
I/O

等各种资源竞争。

例如:

CPU2
│
├── 控制任务
├── AI任务
├── 网络中断
├── kworker
├── RCU
├── timer
└── 其他系统活动

即使控制任务是:

SCHED_FIFO 90

也不能简单认为CPU2已经属于控制任务。

因为CPU核心上发生的事情远不只是“用户态任务”。

这就是为什么实时Linux需要进一步考虑CPU核心隔离。

一个更加典型的设计可以是:

CPU0、CPU1
──────────────
普通Linux
AI
网络
日志
文件系统
系统服务

CPU2、CPU3
──────────────
实时域
运动控制
实时采集
安全任务
实时通信

这样做的意义不是简单地“把任务绑到CPU2”。

而是尽量让CPU2、CPU3减少非实时系统活动。

这也是前面文章反复强调的:

CPU Affinity只是告诉任务“可以在哪里运行”,CPU Isolation则进一步关注“这个CPU上还有谁在运行”。

这两者是完全不同的概念。

进一步来看,仅仅隔离CPU仍然不够。

因为实时系统还需要关注中断。

例如:

实时控制任务
      ↑
      │
CPU2
      ↑
      │
网络中断

如果网络设备产生大量中断,而这些中断恰好进入实时核心,那么控制任务仍然可能受到影响。

因此,一个完整的实时隔离设计通常需要考虑:

任务隔离
+
CPU隔离
+
IRQ隔离
+
内核线程管理
+
Timer/RCU活动控制

这时候,“实时域”的概念就开始出现。

所谓实时域,可以简单理解为:

一个尽可能减少非实时干扰、专门承载关键实时任务的执行区域。

例如:

┌──────────────────────────────┐
│        Linux系统              │
│                              │
│  普通计算域       实时计算域   │
│  ─────────       ─────────   │
│  AI              控制任务     │
│  网络            安全任务     │
│  日志            实时采集     │
│  UI              实时通信     │
│                              │
└──────────────────────────────┘

这时候Linux就具备了同时承载两类不同任务的基础。


三、混合关键性系统的核心不是“两个系统”,而是让不同任务拥有不同的确定性等级

当我们说:

AI
+
Linux
+
RTOS

很多人的第一反应是:

“那是不是应该直接部署两个操作系统?”

这其实是过去很多实时系统常见的架构思路。

例如:

CPU A
运行Linux
↓
AI / 网络 / 文件系统

CPU B
运行RTOS
↓
硬实时控制

这种架构确实有它的价值。

Linux负责:

复杂应用
网络
文件系统
AI
图形
开发生态

RTOS负责:

硬实时
控制
采集
安全

两个系统分别承担自己的任务。

但是这种架构也会带来新的问题:

两个系统之间怎么通信?

例如AI识别结果需要交给控制系统:

Linux
AI识别
   ↓
通信机制
   ↓
RTOS
运动控制

通信过程中就会涉及:

共享内存
消息队列
中断
DMA
OpenAMP
RPMsg
IPC

一旦通信链路复杂起来,系统开发、调试和维护成本都会提高。

同时,两个系统还可能需要:

不同启动流程
不同驱动
不同开发环境
不同升级机制
不同故障处理方式

对于复杂机器人和智能制造设备而言,这会成为系统工程上的额外负担。

因此,另一个非常重要的技术方向开始受到关注:

能不能在一个Linux内核体系中,同时承载普通任务和硬实时任务?

这就涉及前面讨论的:

混合关键性 + 核心隔离 + 实时调度。

其基本思路不是:

Linux + RTOS

而是:

一个系统
│
├── 普通计算域
│
└── 实时计算域

两个域可以共享底层硬件资源,但通过调度、隔离和资源管理,让关键任务获得更稳定的执行环境。

这对于现代智能设备非常有吸引力。

例如一台人形机器人可能需要:

AI视觉
语音交互
大模型推理
路径规划
运动控制
关节控制
实时通信
安全监测

如果全部采用传统RTOS架构:

AI生态
↓
需要大量额外软件支持

如果全部采用普通Linux:

实时控制
↓
需要额外解决确定性问题

因此真正需要的并不是简单地选择:

Linux
OR
RTOS

而是:

如何让Linux具备同时承载不同实时等级任务的能力。

这也是实时Linux技术路线非常重要的一个发展方向。


四、从“优先级”到“隔离”:为什么核心隔离是混合关键性系统的关键技术

到了这里,再回头看前面几篇文章,就会发现一个非常明显的技术演进。

最开始我们讨论实时Linux:

如何让任务及时运行?

于是有:

PREEMPT_RT

然后我们讨论:

任务之间怎么竞争CPU?

于是有:

SCHED_FIFO
SCHED_RR
SCHED_DEADLINE

接下来讨论:

任务为什么还会被其他任务影响?

于是出现:

CPU Isolation
IRQ Isolation

再往下:

任务为什么会被低优先级任务卡住?

于是需要:

Priority Inheritance
实时锁

最终所有这些技术都指向同一个目标:

建立一个可预测的实时执行环境。

而混合关键性系统进一步提出:

不仅要保证一个实时任务,而要保证不同关键等级任务能够在同一个系统中共存。

例如:

关键等级A
硬实时控制
安全任务

关键等级B
实时通信
状态计算

关键等级C
AI推理
视觉处理

关键等级D
日志
UI
后台服务

不同任务的要求不同,就不应该采用完全相同的资源策略。

可以形成类似:

                    CPU资源
                       │
          ┌────────────┴────────────┐
          ▼                         ▼
      实时核心                    普通核心
          │                         │
     ┌────┴────┐              ┌─────┴─────┐
     ▼         ▼              ▼           ▼
  控制任务   安全任务        AI任务       网络

如果进一步做核心隔离:

CPU0 CPU1
普通计算
AI
网络
日志
   │
   │
   │
CPU2 CPU3
实时控制
安全任务
实时通信

那么AI负载突然增加时:

AI CPU占用率
████████████████████

主要影响的是普通计算域。

实时核心仍然拥有相对独立的CPU资源:

RT CPU
████

这就是核心隔离对于混合关键性系统的意义。

当然,这并不意味着隔离之后就可以完全忽略其他资源。

真正成熟的系统还需要继续关注:

内存
缓存
DMA
总线
I/O
IRQ
共享设备
共享锁

因为CPU隔离并不等于整个硬件平台完全隔离。

但从系统软件架构角度来看,CPU核心隔离提供了一个非常重要的基础:

把不同实时等级的任务放入不同的执行区域。

这比单纯依赖任务优先级更容易建立系统边界。

例如:

优先级方案:

AI       Priority 30
网络     Priority 40
控制     Priority 90

这种方式本质上还是:

所有任务共享CPU

而核心隔离方案则是:

AI/网络
→ CPU0/CPU1

控制
→ CPU2/CPU3

二者的思路完全不同。

前者主要解决:

谁先运行。

后者进一步解决:

谁使用哪一块CPU资源。

这也是为什么对于真正追求确定性的实时系统来说:

资源隔离往往比单纯提高任务优先级更加重要。


五、从混合关键性到望获OS:实时Linux真正的下一步是让不同任务“共存而不互相干扰”

如果把整个实时Linux技术路线重新梳理一次,会发现它其实经历了几个非常明显的阶段。

第一阶段:

解决Linux能不能抢占。

核心技术:

PREEMPT_RT

第二阶段:

解决实时任务怎么调度。

核心技术:

SCHED_FIFO
SCHED_RR
SCHED_DEADLINE

第三阶段:

解决实时任务如何减少CPU和中断干扰。

核心技术:

CPU Affinity
CPU Isolation
IRQ Affinity
IRQ Isolation

第四阶段:

解决实时任务之间如何进行可预测同步。

核心技术:

Mutex
Priority Inheritance
实时锁

而第五阶段,就是今天讨论的:

如何让不同实时等级的任务在同一个系统中共存。

这就是混合关键性系统。

从这个角度来看,未来的实时Linux并不是简单地追求:

更低平均延迟

而是更加关注:

更低最坏情况延迟
+
更清晰的资源边界
+
更强的任务隔离
+
更可预测的调度
+
不同关键等级任务共存

对于机器人、工业控制和智能制造来说,这种架构尤其重要。

例如一台智能机器人未来可能同时存在:

AI视觉
        ↓
目标识别

路径规划
        ↓
轨迹生成

运动控制
        ↓
关节控制

安全监测
        ↓
异常处理

从软件角度看,它们完全可以属于同一套系统。

但从实时性角度看,它们绝不能被完全同等对待。

真正合理的系统应该能够表达:

AI:
追求吞吐量

路径规划:
关注计算响应

运动控制:
严格周期性

安全监控:
强调快速响应

日志:
允许延迟

然后根据不同任务的特点,分别使用:

不同调度策略
+
不同CPU资源
+
不同优先级
+
不同隔离级别

这也是望获OS这类国产实时操作系统值得重点关注的技术方向。

对于面向工业控制、机器人、边缘计算等场景的实时系统而言,真正的竞争力并不只是“能不能运行Linux应用”,而是:

能不能让复杂Linux生态与实时控制需求在同一个系统架构中真正共存。

尤其是核心隔离,它的价值并不只是让一个任务“跑在某个CPU上”,而是进一步建立:

普通计算资源
        │
        │ 隔离
        ▼
实时计算资源

这样的系统边界。

当这个边界建立起来以后,SCHED_FIFO、SCHED_RR、SCHED_DEADLINE才有了更加明确的落脚点:

核心隔离
    ↓
确定CPU资源
    ↓
实时调度
    ↓
确定任务执行顺序
    ↓
PREEMPT_RT
    ↓
降低内核路径延迟
    ↓
IRQ隔离
    ↓
减少中断干扰
    ↓
实时锁
    ↓
降低阻塞时间

最终形成的不是某一个单独的技术功能,而是一套完整的:

确定性实时执行环境。

这也是理解现代国产实时Linux与传统RTOS之间关系的一个重要切入点。

未来的实时操作系统并不一定意味着“所有任务都必须运行在一个传统RTOS内核里”。

对于复杂智能设备来说,更现实的需求可能是:

在保留Linux完整软件生态的同时,为关键实时任务提供接近RTOS级别的确定性执行能力。

这也是为什么“Linux实时化”正在从最初的:

降低调度延迟

逐步发展到:

实时调度
+
核心隔离
+
资源隔离
+
混合关键性

真正的目标已经从“让Linux变快”,变成:

让Linux能够管理不同等级的计算任务,并且知道哪些任务可以共享资源,哪些任务必须被保护。

而这恰恰是机器人、工业控制和智能制造系统未来需要面对的核心问题。

当一个系统同时存在AI、视觉、网络、运动控制、安全监测等大量任务时,真正困难的已经不是“CPU够不够快”。

而是:

当所有任务都在抢资源的时候,谁必须得到保障?

对于普通任务,可以接受一定程度的波动。

对于AI任务,可以通过增加算力提高吞吐量。

但对于硬实时控制任务,单纯增加算力并不能解决所有问题。

它真正需要的是:

确定的CPU
确定的调度
确定的响应
确定的资源
确定的边界

因此,从PREEMPT_RT到实时调度,从CPU Isolation到Priority Inheritance,再到混合关键性系统,可以看到实时Linux正在逐渐形成一套完整的方法论:

不是让所有任务都实时,而是让真正需要实时的任务拥有实时能力;不是让所有任务互相独立,而是让关键任务拥有明确的资源边界;不是简单追求更快,而是控制最坏情况下系统到底会发生什么。

这也可能是未来国产实时操作系统非常重要的一条技术演进路径:

从“实时Linux”走向“确定性Linux”,再从“确定性Linux”走向能够承载多种计算范式的混合关键性操作系统。

而下一篇可以继续深入一个更加底层、也非常适合做技术搜索流量的主题:

《CPU隔离之后还会有实时延迟吗?从IRQ、Timer、RCU到内核线程全面理解实时Linux的干扰源》

这一篇可以把前面一直提到的“核心隔离”彻底拆开讲清楚:为什么CPU已经隔离了,实时任务仍然可能出现延迟,以及一个真正的实时核心到底需要清理哪些系统活动。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐