24ec8f4685d898ded65d4675bc4cc6c6020a62e5
[gapil.git] / ipc.tex
1 \chapter{La comunicazione fra processi}
2 \label{cha:IPC}
3
4
5 Uno degli aspetti fondamentali della programmazione in un sistema unix-like è
6 la comunicazione fra processi. In questo capitolo affronteremo solo i
7 meccanismi più elementari che permettono di mettere in comunicazione processi
8 diversi, come quelli tradizionali che coinvolgono \textit{pipe} e
9 \textit{fifo} e i meccanismi di intercomunicazione di System V.
10
11 Tralasceremo invece tutte le problematiche relative alla comunicazione
12 attraverso la rete (e le relative interfacce) che saranno affrontate in gran
13 dettaglio in un secondo tempo.  Non affronteremo invece meccanismi più
14 complessi ed evoluti come le RPC (\textit{Remote Procedure Calls}) e CORBA
15 (\textit{Common Object Request Brocker Architecture}) che in genere sono
16 implementati con un ulteriore livello sopra i meccanismi elementari.
17
18
19
20 \section{La comunicazione fra processi tradizionale}
21 \label{sec:ipc_unix}
22
23 Il primo meccanismo di comunicazione fra processi usato dai sistemi unix-like
24 è quello delle \textit{pipe}, in questa sezione descriveremo le sue basi, le
25 funzioni che ne gestiscono l'uso e le varie forme in cui si è evoluto.
26
27
28 \subsection{Le \textit{pipe} standard}
29 \label{sec:ipc_pipes}
30
31 Le \textit{pipe} nascono sostanzialmente con Unix, e sono il primo, ed uno dei
32 più usati, meccanismi di comunicazione fra processi. Si tratta in sostanza uno
33 speciale tipo di file\footnote{più precisamente un file descriptor; le pipe
34   sono create dal kernel e non risiedono su disco.} in cui un processo scrive
35 ed un altro legge. Si viene così a costituire un canale di comunicazione fra i
36 due processi, nella forma di un \textsl{tubo} (da cui il nome) in cui uno dei
37 processi immette dati che poi arriveranno all'altro.
38
39 Perché questo accada però, e questo è il principale\footnote{Stevens riporta
40   in APUE come limite anche il fatto che la comunicazione è unidirezionale, in
41   realtà questo è un limite facilemente risolvibile usando una coppia di
42   \textit{pipe}.} e limite nell'uso delle \textit{pipe}, è necessario che
43 questi processi possano condividere il file descriptor della \textit{pipe};
44 per questo essi devono comunque derivare da uno stesso processo padre, o, più
45 comunemente, essere nella relazione padre/figlio.
46
47 La funzione che permette di creare una \textit{pipe} è appunto \func{pipe}; il
48 suo prototipo è:
49 \begin{prototype}{unistd.h}
50 {int pipe(int filedes[2])} 
51   
52 Crea una coppia di file descriptor associati ad una \textit{pipe}.
53   
54   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
55     errore, nel qual caso \var{errno} potrà assumere i valori \macro{EMFILE},
56     \macro{ENFILE} e \macro{EFAULT}.}
57 \end{prototype}
58
59 La funzione restituisce una coppia di file descriptor nell'array
60 \param{filedes}; il primo aperto in lettura ed il secondo in scrittura
61
62
63
64 \subsection{Le \textit{pipe} con nome, o \textit{fifo}}
65 \label{sec:ipc_named_pipe}
66
67 Per poter superare il problema delle \textit{pipe} originali, che consentono
68 la comunicazione solo fra processi correlati, passando attraverso strutture
69 interne del kernel, sono stati introdotti dei nuovi oggetti, le \textit{fifo},
70 che invece possono risiedere sul filesystem, e che i processi possono usare
71 per le comunicazioni senza dovere per forza essere in relazione diretta. 
72
73
74
75
76 \section{La comunicazione fra processi di System V}
77 \label{sec:ipc_sysv}
78
79 Per ovviare ai vari limiti dei meccanismo tradizionale di comunicazione fra
80 processi visto in \secref{sec:ipc_unix}, nello sviluppo di System V vennero
81 introdotti una serie di nuovi oggetti e relative interdacce che garantissero
82 una maggiore flessibilità; in questa sezione esamineremo quello che viene
83 ormai chiamato il \textit{System V Inter-Process Comunication System}, più
84 comunemente noto come \textit{SystemV IPC}.
85  
86
87 \subsection{Code di messaggi}
88 \label{sec:ipc_messque}
89
90 Il primo oggetto introdotto dal \textit{SystemV IPC} è quello delle code di
91 messaggi.
92
93 \subsection{Semafori}
94 \label{sec:ipc_semaph}
95
96 Il secondo oggetto introdotto dal \textit{SystemV IPC} è quello dei semafori.
97
98
99 \subsection{Memoria condivisa}
100 \label{sec:ipc_shar_mem}
101
102 Il terzo oggetto introdotto dal \textit{SystemV IPC} è quello della memoria
103 condivisa.
104
105 %%% Local Variables: 
106 %%% mode: latex
107 %%% TeX-master: "gapil"
108 %%% End: