消息(Message)
消息机制以离散的消息单元进行通信,适合结构化数据和请求-响应模式。
- 源码:
os/src/ipc/message.rs
设计目标
- 明确边界:每条消息具备独立边界,避免应用层自行包/拆帧。
- 背压控制:有界队列,超限时发送方阻塞或返回错误。
- 可阻塞/非阻塞:与调度器/等待队列协作,提供一致的阻塞语义。
核心抽象
- Message:描述消息元数据与负载(类型、来源/目标、长度、权限等,具体字段以实现为准)。
- 信箱/通道:维护一端或双端的消息队列,内部以
WaitQueue管理收发双方的睡眠与唤醒。 - 容量与策略:固定或可配置队列深度;丢弃策略(拒绝、覆盖最旧)依据实现而定。
工作流程
- 发送:
- 校验容量与权限。
- 拷贝用户缓冲到内核消息缓冲(或引用计数封装)。
- 入队并唤醒等待接收的任务。
- 接收:
- 队列为空则阻塞(可中断)或立即返回。
- 出队消息,拷贝到用户缓冲并返回消息长度/元数据。
- 取消与中断:可中断睡眠,收到信号后返回中断错误码。
与其他子系统的协作
- 调度/等待队列:空队列等待、满队列背压均通过
WaitQueue实现。 - 信号:允许
recv被信号打断。 - VFS(可选):若实现为文件化端点,可复用通用
read/write/poll接口(以实际实现为准)。
使用建议
- 小消息高频通信:优先使用消息通道,避免在管道中自定义帧格式。
- 大块数据:建议配合共享内存传递数据地址或句柄,消息仅携带控制信息。