\chapter{La comunicazione fra processi}
\label{cha:IPC}


Uno degli aspetti fondamentali della programmazione in un sistema unix-like è
la comunicazione fra processi. In questo capitolo affronteremo solo alcuni dei
meccanismi più elementari che permettono di mettere in comunicazione processi
diversi, come quelli tradizionali che coinvolgono \textit{pipe} e
\textit{fifo} e i meccanismi di intercomunicazione di System V.

Esistono pure sistemi più complessi ed evoluti come le RPC (\textit{Remote
  Procedure Calls}) e CORBA (\textit{Common Object Request Brocker
  Architecture}) che non saranno affrontati qui. Inoltre tratteremo nei
capitoli successivi tutta la problematica relativa alla comunicazione
attraverso la rete.



\section{La comunicazione fra processi tradizionale}
\label{sec:ipc_unix}

Il primo meccanismo di comunicazione fra processi usato dai sistemi unix-like
è quello delle \textit{pipe}, in questa sezione descriveremo le sue basi, le
funzioni che ne gestiscono l'uso e le varie forme in cui si è evoluto.


\subsection{Le \textit{pipe} standard}
\label{sec:ipc_pipes}

Le \textit{pipe} nascono sostanzialmente con Unix, e sono il primo, e più
comunemente usato, meccanismo di comunicazione fra processi. Esse sono un file
speciale in cui un processo scrive ed un altro legge. Si viene così a
costituire un canale di comunicazione fra i due processi, nella forma di un
\textsl{tubo} (da cui il nome) in cui uno immette dati che arriveranno
all'altro. 

Perché questo accada però, e questo è il principale limite nell'uso delle
\textit{pipe}, è necessario che questi processi possano condividere il file
descriptor della \textit{pipe}; per questo essi devono comunque derivare da
uno stesso processo padre, o, più comunemente, essere nella relazione
padre/figlio.



\subsection{Le \textit{pipe} con nome, o \textit{fifo}}
\label{sec:ipc_named_pipe}

Per poter superare il problema delle \textit{pipe} originali, che consentono
la comunicazione solo fra processi correlati, passando attraverso strutture
interne del kernel, sono stati introdotti dei nuovi oggetti, le \textit{fifo},
che invece possono risiedere sul filesystem, e che i processi possono usare
per le comunicazioni senza dovere per forza essere in relazione diretta. 




\section{La comunicazione fra processi di System V}
\label{sec:ipc_sysv}

Per ovviare ai vari limiti dei meccanismo tradizionale di comunicazione fra
processi basato sulle \textit{pipe}, nello sviluppo di System V vennero
introdotti una serie di nuovi oggetti che garantissero una maggiore
flessibilità; in questa sezione esamineremo quello che viene ormai chiamato il
\textit{System V Inter Process Comunication system}, più comunemente noto come 
\textit{SystemV IPC}. 
 
\subsection{Code di messaggi}
\label{sec:ipc_messque}

Il primo oggetto introdotto dal \textit{SystemV IPC} è quello delle code di
messaggi. 

\subsection{Semafori}
\label{sec:ipc_semaph}

Il secondo oggetto introdotto dal \textit{SystemV IPC} è quello dei semafori.


\subsection{Memoria condivisa}
\label{sec:ipc_shar_mem}

Il terzo oggetto introdotto dal \textit{SystemV IPC} è quello della memoria
condivisa.

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "gapil"
%%% End: 
