Skip to main content

Linux でのプロセス間通信 (IPC)

この章では、Linux システムにおけるプロセス間通信 (IPC) メカニズムの概要を説明します。ここで説明したメカニズムは、一般的な Linux プロセス間の IPC と、特に 1 つまたは複数の Linux プロセス間の 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 ドメインソケット)

ストリームベースまたはパケットベースで、ローカルまたはホスト間でメッセージを交換します

  • Unix ドメインソケットは、ローカル通信において TCP/UDP よりもパフォーマンスが大幅に向上します。

  • ネットワークソケットは、デバイスの境界を越えたデータ交換を可能にします。

  • socket

  • accept/bind/listen/connect

  • read/write

  • close

使用説明書

  • テクノロジーに依存しない:

    IPC メカニズムは特定のテクノロジーに限定されません。これらのテクノロジーはどのような方法でも組み合わせることができます。プロセスは、次のようなさまざまな言語やランタイム環境で実装できます。

    • ネイティブバイナリ (C/C++)

    • Python スクリプト

    • Java アプリケーション

    • からのIECコード CODESYS

  • IEC アプリケーションのモジュール化により、保守性、耐障害性、拡張性が向上します。

    1つの大規模IECアプリケーションであっても、IPCは機能単位に分解すると便利です。次に例を示します。

    • モーション

    • フィールドバス

    • 視覚化

    • データ交換/エクスポート

  • ネイティブインターフェースがない場合のメリット:

    IPCは、必要なAPIが目的のテクノロジーで利用できない場合に使用できます。

    例:Python ライブラリには必要な機能が含まれていますが、IEC → Unix ソケットまたは共有メモリ経由の通信で直接使用することはできません。