首页 > 学院 > 操作系统 > 正文

RTAI进程间各种通讯方式

2024-06-28 16:02:12
字体:
来源:转载
供稿:网友

Semaphores 实时任务间通信和同步。 支持各种类型的信号量:CNT_SEM,BIN_SEM,RES_SEM以及所有这样信号量的orred组合。实现互斥信号量、读写锁、递归自旋锁、条件变量、障碍。 支持不同的排队策略:FIFO_Q,PRIO_Q.资源信号量无论什么情况下都会强制执行PRIO_Q策略。

Shared Memory RTAI都有一个特定的模块,允许整体对称分配和共享内存inter/ intra-kernel /user space。以下任何一对之间共享内存都是可能的:RTAI本身的任务,linux内核进程,Linux用户空间进程,LXRT任务。

FIFOs RT FIFO是一种把一个实时任务和一个Linux的进程点对点连接的链路。它很像一个Unix管道。实施中虽然允许FIFO可以是双向的,但在实践中这基本上没什么意义。所以,实际使用中FIFO是单向的,方向由程序员指定。 用户空间进程把RT-FIFO作为字符设备对待,(/dev/rtf0 to /dev/rtf63)。进程打开一个FIFO做读写操作,然后使用read()或write()文件描述符来传输数据。 需要注意的是,在用户空间,你通过打开设备时获得的文件描述符来定位fifo,而在内核空间,你直接通过他们的次设备号定位。所以,你需要把从用户空间打开设备(/dev/rtfxx,…) 时获得的文件描述符与你将要在内核空间使用的xx整数 配对。 Rtai fifo只能在只使用实时中断处理程序的应用程序中使用,所以没有安装RTAI调度器。

Mailbox 任务间通讯,需要在创建时候指定初始大小。 可以发送任意大小数据通过任意大小的Mailbox缓冲。(自由、灵活) 允许多个发送或接收者,每个发送或接收者都会根据优先级依次获得他们请求的服务。

Typed Mailbox 消息广播:传递一个消息给所有等待同意TBX的任务。 紧急信息发送:这些消息不排队,但是会绕过所有其他已经在TBX里的消息在队列头插入。 在创建TBX时,可以设置在运行时能设置PRIORITY/ FIFO唤醒政策的功能。

Messages 任务间通讯,RTAI任务描述符作为消息持有人。发送者和接受者不同优先级时,会存在高优先级抢占现象。 RT_TASK* rt_send (RT_TASK* task, unsigned int msg); 如果接收方任务准备好了接受消息,rt_send立即返回,否则调用者阻塞。 RT_TASK* rt_receive (RT_TASK* task, unsigned int *msg); 如果task == 0,调用者接受来自任何任务的消息,如果有在等待的消息,rt_receive 立刻返回.。否则调用者将被阻塞。 注意: 由于所有的消息函数返回的是任务地址,0xffff可能看起来像是不恰当的返回值。然而在所有RTAI 运行的cpu上,0xffff都不是一个可以被RTAI任务使用的地址,所以它总是安全的。 如果希望不阻塞,可以使用rt_send_if和rt_receive_if。

POSIX Message Queue 添加进RTAI来支持标准POSIX Message Queue


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表