System Architecture ARCHITECTURE / IPC

任务通信 Inter-Task Communication

IPC 描述任务之间如何交换数据、传递通知,以及围绕共享资源建立协作关系。 在实时操作系统中,理解通信对象的语义,还需要进一步理解它们与任务状态、 等待条件及调度过程之间的联系。

数据传递 任务同步 等待与唤醒 调度关联
HRTOS · 架构文档索引
01 / Overview

IPC 在系统中的职责

通信对象为任务提供协作接口;具体行为则由对象语义、调用上下文和内核实现共同决定。

SYSTEM / ROLE

从任务协作看通信机制

一个任务可能负责采集数据,另一个任务负责处理数据,还有任务负责协议解析、 状态管理或输出控制。IPC 为这些相对独立的执行单元提供协作方式, 减少任务之间不必要的直接耦合。

不同通信对象解决的问题并不相同:有的用于保存和传递数据,有的用于通知某个条件已经发生, 有的用于协调对共享资源的访问。选择机制时,应首先明确数据是否需要缓存、 通知是否允许合并,以及调用方是否可能等待。

核心原则:先定义语义,再选择对象

不能仅凭“通信速度快”或“代码简单”判断 IPC 是否合适。 数据保留方式、等待规则、资源开销和调度影响都需要纳入设计。

02 / Concepts

理解不同的通信模型

按解决的问题理解 IPC,比单纯记忆对象名称更有助于设计可靠的任务协作关系。

SEMANTICS / DESIGN

消息与数据传递

DATA TRANSFER

适用于生产者与消费者之间的数据交换。设计时需要明确数据是否复制、 缓冲区容量、数据顺序,以及发送速度超过接收速度时的处理策略。

重点:数据生命周期、缓冲容量与溢出策略。

事件与状态通知

EVENT / NOTIFICATION

用于表达某个条件已经发生或某种状态已经满足。需要区分通知是否保留、 多次发生能否合并,以及接收方如何判断和处理对应状态。

重点:事件语义、通知保留和状态判断。

信号量与执行同步

SYNCHRONIZATION

可用于协调执行顺序,或在适当的设计中表示有限数量的可用资源。 二值信号量和计数信号量具有不同用途,不能将它们的语义简单等同。

重点:计数规则、等待条件与唤醒语义。

互斥与共享资源保护

RESOURCE PROTECTION

当多个任务可能访问同一共享资源时,需要明确资源保护范围、 获取与释放规则,以及任务持有资源期间可能发生的调度问题。

重点:临界区边界、锁使用规则与优先级影响。
实现边界: 上述内容是 IPC 的通用概念分类,不代表 HRTOS 4.0 必然提供每一种对象, 也不代表不同对象具有相同的阻塞、唤醒或中断上下文使用规则。 具体支持范围应以 HRTOS 4.0 实际接口和实现文档为准。
03 / Execution Flow

通信操作与调度的关系

IPC 可能改变任务的等待条件或就绪状态,但通信操作与任务切换并不是同一件事。

OBJECT / TASK / SCHEDULER
STEP 01

任务发起操作

任务尝试发送数据、发布通知、获取同步条件,或访问受保护的资源。

STEP 02

检查对象状态

内核根据具体对象的语义,判断操作是否可以完成,以及是否满足等待条件。

STEP 03

更新相关状态

操作可能更新通信对象、返回操作结果,或改变相关任务的等待与就绪状态。

STEP 04

按内核规则继续执行

是否发生任务切换,取决于具体接口语义、调度策略和内核实际执行路径。

注:该流程用于说明 IPC 与任务状态、调度之间的一般关系,不是 HRTOS 内核源码的逐指令执行流程。 不同对象和不同接口可能采用不同的处理路径。

04 / Documentation

深入阅读

从整体通信路径进入,再理解对象模型与具体机制的设计和使用边界。

DOCUMENTATION / INDEX
05 / Engineering Notes

设计时需要明确的边界

正确选择通信机制只是第一步;调用环境、等待行为和资源约束同样重要。

DESIGN / CONSTRAINTS

任务上下文与中断上下文

中断服务程序与普通任务具有不同的执行约束。不能假设任务上下文中可用的所有 IPC 操作都可以在中断中调用,尤其需要避免在不允许阻塞的上下文中使用可能等待的接口。 应以具体接口文档明确规定的调用条件为准。

通信正确性与实时性

通信对象能够表达协作关系,但不能单独保证端到端响应时间。 还需要评估任务优先级、临界区长度、数据处理时间、缓冲容量,以及系统负载下的最坏执行路径。