实时编程中的通信机制与资源共享问题
1. 邮箱与消息
在实时编程里,邮箱和消息是重要的通信机制。就像寄信人和收信人要约定好使用的语言一样,消息的发送和接收也需要遵循一定规则。某些内核会对消息施加少量的系统结构。
在受保护模式的系统(如 Linux)中,消息指针指向的内容不能同时被发送者和接收者访问。这种情况下,消息会先从发送者空间复制到邮箱,再从邮箱复制到接收者空间。
邮箱的实现方式多样,有的只能容纳一条消息,有的则能对多条消息进行排队,并按发送顺序传递给接收任务。部分内核还支持发送“高优先级”消息,这类消息会被立即置于队列头部。和信号量类似,任意数量的任务可以在邮箱处等待,排队方式可以是先进先出(FIFO)或按优先级排序。
若一个任务尝试向只能容纳一条消息且当前已有消息的邮箱发送消息,有两种可能情况:邮箱发送服务返回错误,或者任务被阻塞直到能发送消息。此外,当任务向无人等待的邮箱发送消息时,发送者可能会被阻塞,直到有其他任务接收该消息。
邮箱 API
邮箱 API 与信号量 API 很相似,使用前需先创建邮箱。以下是邮箱 API 的相关函数:
mailbox_t *MbxCreate (void *message);
status_t MbxDelete (mailbox_t *mbx);
status_t MbxPost (mailbox_t *mbx, void *msg);
void *MbxPend (mailbox_t *mbx, unsigned int timeout, status_t *status);
status_t Mb
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



