-\chapter{La comunicazione fra porcessi}
+\chapter{La comunicazione fra processi}
\label{cha:IPC}
-\section{Introduzione}
-\label{sec:ipc_intro}
+Uno degli aspetti fondamentali della programmazione in un sistema unix-like è
+la comunicazione fra processi. In questo capitolo affronteremo solo i
+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.
-Uno degli aspetti fondamentali della programmazione in unix è la comunicazione
-fra processi. In questo testo affronteremo solo alcuni dei meccanismi
-fondamentali che permettono di scrivere applicazioni, esistono pure sistemi
-più complessi ed evoluti come le RPC (\textit{Remote Procedure Calls}) e
-CORBA (\textit{Common Object Request Brocker Architecture}) non saranno
-affrontati qui.
+Tralasceremo invece tutte le problematiche relative alla comunicazione
+attraverso la rete (e le relative interfacce) che saranno affrontate in gran
+dettaglio in un secondo tempo. Non affronteremo invece meccanismi più
+complessi ed evoluti come le RPC (\textit{Remote Procedure Calls}) e CORBA
+(\textit{Common Object Request Brocker Architecture}) che in genere sono
+implementati con un ulteriore livello sopra i meccanismi elementari.
-\section{Le pipes standard}
+
+
+\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}
-\section{Le pipes con nome}
-\label{sec:ipc_nampipe}
+Le \textit{pipe} nascono sostanzialmente con Unix, e sono il primo, ed uno dei
+più usati, meccanismi di comunicazione fra processi. Si tratta in sostanza uno
+speciale tipo di file\footnote{più precisamente un file descriptor; le pipe
+ sono create dal kernel e non risiedono su disco.} 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 dei
+processi immette dati che poi arriveranno all'altro.
+
+Perché questo accada però, e questo è il principale\footnote{Stevens riporta
+ in APUE come limite anche il fatto che la comunicazione è unidirezionale, in
+ realtà questo è un limite facilemente risolvibile usando una coppia di
+ \textit{pipe}.} e 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.
+
+La funzione che permette di creare una \textit{pipe} è appunto \func{pipe}; il
+suo prototipo è:
+\begin{prototype}{unistd.h}
+{int pipe(int filedes[2])}
+
+Crea una coppia di file descriptor associati ad una \textit{pipe}.
+
+ \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
+ errore, nel qual caso \var{errno} potrà assumere i valori \macro{EMFILE},
+ \macro{ENFILE} e \macro{EFAULT}.}
+\end{prototype}
+
+La funzione restituisce una coppia di file descriptor nell'array
+\param{filedes}; il primo aperto in lettura ed il secondo in scrittura
+
+
-\section{System V IPC}
+\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}
-\section{Code di messaggi}
+Per ovviare ai vari limiti dei meccanismo tradizionale di comunicazione fra
+processi visto in \secref{sec:ipc_unix}, nello sviluppo di System V vennero
+introdotti una serie di nuovi oggetti e relative interdacce 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}
-\section{Semafori}
+Il primo oggetto introdotto dal \textit{SystemV IPC} è quello delle code di
+messaggi.
+
+\subsection{Semafori}
\label{sec:ipc_semaph}
-\section{Memoria condivisa}
+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: