Comunicazione tra processi - Panoramica
Inter Process Communication (IPC) è un meccanismo che implica la comunicazione di un processo con un altro processo. Questo di solito si verifica solo in un sistema.
La comunicazione può essere di due tipi:
Tra processi correlati che iniziano da un solo processo, come i processi padre e figlio.
Tra processi non correlati o due o più processi diversi.
Di seguito sono riportati alcuni termini importanti che dobbiamo conoscere prima di procedere ulteriormente su questo argomento.
Pipes- Comunicazione tra due processi correlati. Il meccanismo è half duplex, il che significa che il primo processo comunica con il secondo processo. Per ottenere un full duplex, ad esempio, affinché il secondo processo comunichi con il primo processo è necessario un altro tubo.
FIFO- Comunicazione tra due processi non correlati. FIFO è un full duplex, il che significa che il primo processo può comunicare con il secondo processo e viceversa allo stesso tempo.
Message Queues- Comunicazione tra due o più processi con capacità full duplex. I processi comunicheranno tra loro inviando un messaggio e recuperandolo dalla coda. Una volta recuperato, il messaggio non è più disponibile nella coda.
Shared Memory- La comunicazione tra due o più processi avviene tramite un pezzo di memoria condiviso tra tutti i processi. La memoria condivisa deve essere protetta l'una dall'altra sincronizzando l'accesso a tutti i processi.
Semaphores- I semafori servono per sincronizzare l'accesso a più processi. Quando un processo vuole accedere alla memoria (per leggere o scrivere), deve essere bloccato (o protetto) e rilasciato quando l'accesso viene rimosso. Questo deve essere ripetuto da tutti i processi per proteggere i dati.
Signals- Il segnale è un meccanismo per la comunicazione tra più processi tramite segnalazione. Ciò significa che un processo sorgente invierà un segnale (riconosciuto da un numero) e il processo di destinazione lo gestirà di conseguenza.
Note - Quasi tutti i programmi in questo tutorial sono basati su chiamate di sistema sotto il sistema operativo Linux (eseguito in Ubuntu).