关于如何通过FSMLabs为realtime编写实时代码有很多例子,但是这个发行版在很多年前就已经被放弃了。目前,针对普通内核的PREEMPT_RT修补程序正在积极开发,但官方Wiki上的代码示例很少。首先让我介绍一下我的问题。
我正在写一个包含两个程序的项目:
如何在这些进程之间进行通信以保持进程(1)的实时性,并避免页面错误或其他可能干扰实时应用程序的行为?
方法1.仅使用线程
有两个线程:
方法2.共享内存
在旧的FSMLabs中,建议在进程之间使用共享的全局内存。现代PREEMPT_RT的Wiki页面建议使用mmap()进行进程数据共享,但在同一篇文章中,由于页面错误,它不鼓励mmap()。
方法3.命名管道
这是一种更灵活的进程间通信方式。不过,我对Linux编程还不熟悉。我们希望在机器和客户端之间共享内存,但它也应该提供一种方法来加载新程序(文件路径或程序代码)、停止/启动机器等。旧的FSMLabs RT实现了它自己的FIFO队列(命名管道)。现代PREEMPT_RT没有。使用名称管道会破坏实时行为吗?如何做好呢?是使用O_NONBLOCK标志读取数据,还是创建另一个线程,用于从管道读取/写入数据?
你知道在一个进程必须是实时的进程之间进行通信的其他方式吗?也许我只需要线。但是,考虑一个更多的客户端连接到虚拟机进程的场景。
发布于 2017-11-24 09:12:26
为了在同一主机操作系统上执行的进程之间交换数据,还可以使用UNIX域套接字。
https://stackoverflow.com/questions/29616738
复制相似问题