Skip to main content

Comunicazione interprocesso (IPC) su Linux

Questo capitolo fornisce una panoramica dei meccanismi di comunicazione tra processi (IPC) sui sistemi Linux. I meccanismi descritti si applicano sia all'IPC tra processi Linux generici che in particolare all'IPC CODESYS Control Sistemi runtime SL e altri processi.

I meccanismi elencati di seguito sono riassunti e resi disponibili da sistemi basati su Linux CODESYS sistemi di runtime tramite CODESYS librerie.

Meccanismo

Scopo

Rilevante CODESYS Biblioteche

Note

API Linux tipica

Memoria condivisa

I processi scambiano grandi quantità di dati contemporaneamente.

  • SysShm

  • Primitive di sincronizzazione: SysEvent, SysSemProcess

  • La memoria condivisa consente la lettura/scrittura parallela senza copiare

  • La sincronizzazione degli accessi è fortemente consigliata, ad esempio:

    • Bandiere atomiche per il coordinamento della lettura/scrittura

    • Eventi o semafori per una sincronizzazione precisa

  • shm_open + mmap

  • shm_close

Semafori POSIX (meccanismi di sincronizzazione)

Controlla l'accesso alle risorse condivise o il controllo del flusso

  • SysEvent

  • SysSemProcess

Il codice di blocco nell'applicazione IEC non dovrebbe causare grandi ritardi nel funzionamento ciclico e nelle attività IEC cicliche.

  • sem_open

  • sem_wait/sem_try_wait/sem_clockwait

  • sem_post

  • sem_close

Socket (UDP, TCP, socket di dominio Unix)

Scambia messaggi, basati su stream o pacchetti, localmente o tra host

  • Gli Unix Domain Sockets offrono vantaggi significativi in termini di prestazioni rispetto a TCP/UDP per le comunicazioni locali.

  • Le prese di rete consentono lo scambio di dati oltre i confini del dispositivo.

  • socket

  • accept/bind/listen/connect

  • read/write

  • close

Istruzioni per l'uso

  • Indipendente dalla tecnologia:

    I meccanismi IPC non sono legati a una tecnologia specifica. Le tecnologie possono essere combinate in qualsiasi modo. I processi possono essere implementati in diversi linguaggi o ambienti di runtime, ad esempio:

    • Binari nativi (C/C++)

    • script Python

    • Applicazioni Java

    • Codice IEC da CODESYS

  • La modularizzazione delle applicazioni IEC migliora la manutenibilità, la tolleranza ai guasti e la scalabilità:

    Anche per una singola applicazione IEC di grandi dimensioni, l'IPC può essere utile per suddividerlo in unità funzionali, ad esempio:

    • Movimento

    • Fieldbus

    • Visualizzazione

    • Scambio/esportazione di dati

  • Vantaggi in assenza di interfacce native:

    L'IPC può essere utilizzato quando un'API richiesta non è disponibile nella tecnologia desiderata.

    Esempio: una libreria Python contiene una funzionalità richiesta, ma non può essere utilizzata direttamente nella comunicazione IEC → tramite socket Unix o memoria condivisa.