Skip to main content

Linux 上的进程间通信 (IPC)

本章概述了 Linux 系统上的进程间通信 (IPC) 机制。所描述的机制既适用于通用 Linux 进程之间的 IPC,也特别适用于一个或多个进程之间的 IPC CODESYS Control SL 运行时系统和其他进程。

下面列出的机制由基于 Linux 的抽象并提供 CODESYS 运行时系统通过 CODESYS 图书馆。

机制

目的

相关 CODESYS 图书馆

注意事项

典型 Linux API

共享内存

进程同时交换大量数据。

  • SysShm

  • 同步原语: SysEventSysSemProcess

  • 共享内存允许并行读取/写入而无需复制

  • 强烈建议进行访问同步,例如:

    • 用于读/写协调的原子标志

    • 用于精确同步的事件或信号量

  • shm_open + mmap

  • shm_close

POSIX 信号量(同步机制)

控制对共享资源的访问权限或流量控制

  • SysEvent

  • SysSemProcess

IEC 应用程序中的阻塞代码不应在循环操作和循环式 IEC 任务中造成较大的延迟。

  • sem_open

  • sem_wait/sem_try_wait/sem_clockwait

  • sem_post

  • sem_close

套接字(UDP、TCP、Unix 域套接字)

在本地或跨主机交换消息(基于流或基于数据包)

  • 与 TCP/UDP 相比,Unix 域套接字为本地通信提供了显著的性能优势。

  • 网络套接字允许在设备边界之外进行数据交换。

  • socket

  • accept/bind/listen/connect

  • read/write

  • close

使用说明

  • 独立于技术:

    IPC机制不受特定技术的约束。这些技术可以以任何方式组合。流程可以在不同的语言或运行时环境中实现,例如:

    • 原生二进制文件 (C/C++)

    • Python 脚

    • Java 应用程序

    • IEC 代码来自 CODESYS

  • IEC 应用程序的模块化提高了可维护性、容错能力和可扩展性:

    即使对于单个大型 IEC 应用程序,IPC 也可以将其分解为功能单元,例如:

    • 动作

    • 现场总线

    • 可视化

    • 数据交换/导出

  • 缺少原生接口时的好处:

    当所需技术中没有所需的 API 时,可以使用 IPC。

    示例:Python 库包含必需的功能,但不能直接用于 IEC → 通过 Unix 套接字或共享内存进行通信。