消息(Message)

消息机制以离散的消息单元进行通信,适合结构化数据和请求-响应模式。

  • 源码:os/src/ipc/message.rs

设计目标

  • 明确边界:每条消息具备独立边界,避免应用层自行包/拆帧。
  • 背压控制:有界队列,超限时发送方阻塞或返回错误。
  • 可阻塞/非阻塞:与调度器/等待队列协作,提供一致的阻塞语义。

核心抽象

  • Message:描述消息元数据与负载(类型、来源/目标、长度、权限等,具体字段以实现为准)。
  • 信箱/通道:维护一端或双端的消息队列,内部以 WaitQueue 管理收发双方的睡眠与唤醒。
  • 容量与策略:固定或可配置队列深度;丢弃策略(拒绝、覆盖最旧)依据实现而定。

工作流程

  • 发送:
    1. 校验容量与权限。
    2. 拷贝用户缓冲到内核消息缓冲(或引用计数封装)。
    3. 入队并唤醒等待接收的任务。
  • 接收:
    1. 队列为空则阻塞(可中断)或立即返回。
    2. 出队消息,拷贝到用户缓冲并返回消息长度/元数据。
  • 取消与中断:可中断睡眠,收到信号后返回中断错误码。

与其他子系统的协作

  • 调度/等待队列:空队列等待、满队列背压均通过 WaitQueue 实现。
  • 信号:允许 recv 被信号打断。
  • VFS(可选):若实现为文件化端点,可复用通用 read/write/poll 接口(以实际实现为准)。

使用建议

  • 小消息高频通信:优先使用消息通道,避免在管道中自定义帧格式。
  • 大块数据:建议配合共享内存传递数据地址或句柄,消息仅携带控制信息。