Inizio della revisione del formato per la suddivisione in due parti,
[gapil.git] / ipc.tex
diff --git a/ipc.tex b/ipc.tex
index 25f0f301bedd7480c59dbddf8faed23d3885171a..cb30002d1525f2a3e83f798b88eb76bc3625c4b3 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -74,7 +74,7 @@ illustrato in fig.~\ref{fig:ipc_pipe_singular}, in cui sono illustrati i due
 capi della pipe, associati a ciascun file descriptor, con le frecce che
 indicano la direzione del flusso dei dati.
 
-\begin{figure}[htb]
+\begin{figure}[!htb]
   \centering
   \includegraphics[height=5cm]{img/pipe}
   \caption{Schema della struttura di una pipe.}
@@ -90,7 +90,7 @@ compresi quelli associati ad una pipe (secondo la situazione illustrata in
 fig.~\ref{fig:ipc_pipe_fork}). In questo modo se uno dei processi scrive su un
 capo della pipe, l'altro può leggere.
 
-\begin{figure}[htb]
+\begin{figure}[!htb]
   \centering
   \includegraphics[height=5cm]{img/pipefork}
   \caption{Schema dei collegamenti ad una pipe, condivisi fra processo padre e
@@ -159,7 +159,7 @@ JPEG. Usando una pipe potremo inviare l'output del primo sull'input del
 secondo, secondo lo schema mostrato in fig.~\ref{fig:ipc_pipe_use}, in cui la
 direzione del flusso dei dati è data dalle frecce continue.
 
-\begin{figure}[htb]
+\begin{figure}[!htb]
   \centering
   \includegraphics[height=5cm]{img/pipeuse}
   \caption{Schema dell'uso di una pipe come mezzo di comunicazione fra
@@ -190,9 +190,9 @@ fig.~\ref{fig:ipc_barcodepage_code} abbiamo riportato il corpo del programma,
 il cui codice completo è disponibile nel file \file{BarCodePage.c} che si
 trova nella directory dei sorgenti.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/BarCodePage.c}
   \end{minipage} 
   \normalsize 
@@ -375,9 +375,9 @@ per primo, si bloccherà in attesa di ricevere sullo standard input il
 risultato dell'elaborazione del precedente, benché quest'ultimo venga invocato
 dopo.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/BarCode.c}
   \end{minipage} 
   \normalsize 
@@ -496,7 +496,7 @@ illustrata in fig.~\ref{fig:ipc_fifo_server_arch} in cui i client inviano le
 richieste al server su una fifo nota mentre le risposte vengono reinviate dal
 server a ciascuno di essi su una fifo temporanea creata per l'occasione.
 
-\begin{figure}[htb]
+\begin{figure}[!htb]
   \centering
   \includegraphics[height=9cm]{img/fifoserver}
   \caption{Schema dell'utilizzo delle fifo nella realizzazione di una
@@ -516,9 +516,9 @@ ed \var{n}, che indica il numero di frasi tenute in memoria, ad un valore
 diverso da quelli preimpostati. Il codice completo è nel file
 \file{FortuneServer.c}.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/FortuneServer.c}
   \end{minipage} 
   \normalsize 
@@ -607,9 +607,9 @@ stampa a video le informazioni di utilizzo ed esce, riportando solo la sezione
 principale del programma e le definizioni delle variabili. Il codice completo
 è nel file \file{FortuneClient.c} dei sorgenti allegati.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/FortuneClient.c}
   \end{minipage} 
   \normalsize 
@@ -839,7 +839,7 @@ mantiene varie proprietà ed informazioni associate all'oggetto.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/ipc_perm.h}
   \end{minipage} 
   \normalsize 
@@ -886,8 +886,8 @@ che deve specificare il \itindex{pathname} \textit{pathname} di un file
 effettivamente esistente e di un numero di progetto \param{proj\_id)}, che di
 norma viene specificato come carattere, dato che ne vengono utilizzati solo
 gli 8 bit meno significativi.\footnote{nelle libc4 e libc5, come avviene in
-  SunOS, l'argomento \param{proj\_id} è dichiarato tipo \ctyp{char}, le
-  \acr{glibc} usano il prototipo specificato da XPG4, ma vengono lo stesso
+  SunOS, l'argomento \param{proj\_id} è dichiarato tipo \ctyp{char}, la
+  \acr{glibc} usa il prototipo specificato da XPG4, ma vengono lo stesso
   utilizzati gli 8 bit meno significativi.}
 
 Il problema è che anche così non c'è la sicurezza che il valore della chiave
@@ -1036,9 +1036,9 @@ di quel tipo,\footnote{questo vale fino ai kernel della serie 2.2.x, dalla
   valore è 32768.}  si evita così il riutilizzo degli stessi numeri, e si fa
 sì che l'identificatore assuma tutti i valori possibili.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/IPCTestId.c}
   \end{minipage} 
   \normalsize 
@@ -1186,7 +1186,7 @@ file \procrelfile{/proc/sys/kernel}{msgmax},
 \procrelfile{/proc/sys/kernel}{msgmnb} e
 \procrelfile{/proc/sys/kernel}{msgmni} di \file{/proc/sys/kernel/}.
 
-\begin{figure}[htb]
+\begin{figure}[!htb]
   \centering \includegraphics[width=13cm]{img/mqstruct}
   \caption{Schema della struttura di una coda messaggi.}
   \label{fig:ipc_mq_schema}
@@ -1213,7 +1213,7 @@ cui queste strutture vengono mantenute dal kernel.\footnote{lo schema
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/msqid_ds.h}
   \end{minipage} 
   \normalsize 
@@ -1377,7 +1377,7 @@ dovrà essere pari a \const{LENGTH}).
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/msgbuf.h}
   \end{minipage} 
   \normalsize 
@@ -1531,9 +1531,9 @@ server di \textit{fortunes} usando queste al posto delle fifo. In questo caso
 useremo una sola coda di messaggi, usando il tipo di messaggio per comunicare
 in maniera indipendente con client diversi.
 
-\begin{figure}[!bht]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15.6cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/MQFortuneServer.c}
   \end{minipage} 
   \normalsize 
@@ -1605,9 +1605,9 @@ parte di un segnale; in tal caso verrà eseguito (\texttt{\small 45--48}) il
 gestore \code{HandSIGTERM}, che semplicemente si limita a cancellare la coda
 (\texttt{\small 46}) ed ad uscire (\texttt{\small 47}).
 
-\begin{figure}[!bht]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15.6cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/MQFortuneClient.c}
   \end{minipage} 
   \normalsize 
@@ -1796,7 +1796,7 @@ semaforo all'uscita del processo.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/semid_ds.h}
   \end{minipage} 
   \normalsize 
@@ -1838,7 +1838,7 @@ funzioni di controllo.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/sem.h}
   \end{minipage} 
   \normalsize 
@@ -1928,7 +1928,7 @@ specificata con \param{cmd}, ed opera o sull'intero insieme specificato da
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/semun.h}
   \end{minipage} 
   \normalsize 
@@ -2074,7 +2074,7 @@ effettivamente eseguite se e soltanto se è possibile effettuarle tutte quante.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/sembuf.h}
   \end{minipage} 
   \normalsize 
@@ -2183,7 +2183,7 @@ struttura del \textit{SysV IPC} è stata modificata, ma le definizioni relative
 a queste strutture restano per compatibilità.\footnote{in particolare con le
   vecchie versioni delle librerie del C, come le libc5.}
 
-\begin{figure}[htb]
+\begin{figure}[!htb]
   \centering \includegraphics[width=13cm]{img/semtruct}
   \caption{Schema della struttura di un insieme di semafori.}
   \label{fig:ipc_sem_schema}
@@ -2250,9 +2250,9 @@ creare un insieme contenente un singolo semaforo, per il quale poi useremo un
 valore unitario per segnalare la disponibilità della risorsa, ed un valore
 nullo per segnalarne l'indisponibilità. 
 
-\begin{figure}[!bht]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/Mutex.c}
   \end{minipage} 
   \normalsize 
@@ -2380,7 +2380,7 @@ norma, significa insieme a dei semafori.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/shmid_ds.h}
   \end{minipage} 
   \normalsize 
@@ -2567,9 +2567,8 @@ particolare l'indirizzo finale del segmento dati (quello impostato da
 Si tenga presente infine che la funzione ha successo anche se il segmento è
 stato marcato per la cancellazione.
 
-\begin{figure}[htb]
-  \centering
-  \includegraphics[height=10cm]{img/sh_memory_layout}
+\begin{figure}[!htb]
+  \centering \includegraphics[height=10cm]{img/sh_memory_layout}
   \caption{Disposizione dei segmenti di memoria di un processo quando si è
     agganciato un segmento di memoria condivisa.}
   \label{fig:ipc_shmem_layout}
@@ -2578,7 +2577,7 @@ stato marcato per la cancellazione.
 L'argomento \param{shmaddr} specifica a quale indirizzo\footnote{lo standard
   SVID prevede che l'argomento \param{shmaddr} sia di tipo \ctyp{char *}, così
   come il valore di ritorno della funzione; in Linux è stato così con le
-  \acr{libc4} e le \acr{libc5}, con il passaggio alle \acr{glibc} il tipo di
+  \acr{libc4} e le \acr{libc5}, con il passaggio alla \acr{glibc} il tipo di
   \param{shmaddr} è divenuto un \ctyp{const void *} e quello del valore di
   ritorno un \ctyp{void *}.} deve essere associato il segmento, se il valore
 specificato è \val{NULL} è il sistema a scegliere opportunamente un'area di
@@ -2668,9 +2667,9 @@ In caso di successo la funzione aggiorna anche i seguenti campi di
 inoltre la regione di indirizzi usata per il segmento di memoria condivisa
 viene tolta dallo spazio di indirizzi del processo.
 
-\begin{figure}[!bht]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15.6cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/SharedMem.c}
   \end{minipage} 
   \normalsize 
@@ -2755,9 +2754,9 @@ riguarda la gestione delle opzioni e la stampa delle istruzioni di uso a
 video; al solito il codice completo si trova con i sorgenti allegati nel file
 \file{DirMonitor.c}.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15.6cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/DirMonitor.c}
   \end{minipage} 
   \normalsize 
@@ -2809,9 +2808,9 @@ sarà vista nella forma data da \struct{DirProp}. Infine (\texttt{\small
 di interfaccia già descritte in sez.~\ref{sec:ipc_sysv_sem}, anche un mutex,
 che utilizzeremo per regolare l'accesso alla memoria condivisa.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15.6cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/ComputeValues.c}
   \end{minipage} 
   \normalsize 
@@ -2869,9 +2868,9 @@ i dati, dopo di che (\texttt{\small 20}) distacca e rimuove il segmento di
 memoria condivisa usando \func{ShmRemove}.  Infine (\texttt{\small 21})
 rimuove il mutex con \func{MutexRemove} ed esce (\texttt{\small 22}).
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15.6 cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/ReadMonitor.c}
   \end{minipage} 
   \normalsize 
@@ -2987,7 +2986,7 @@ key        msqid      owner      perms      used-bytes   messages
 %% condivisa; uno schema semplificato della struttura è illustrato in
 %% fig.~\ref{fig:ipc_shm_struct}. 
 
-%% \begin{figure}[htb]
+%% \begin{figure}[!htb]
 %%   \centering
 %%   \includegraphics[width=10cm]{img/shmstruct}
 %%    \caption{Schema dell'implementazione dei segmenti di memoria condivisa in
@@ -3071,9 +3070,9 @@ guida) che permettono rispettivamente di creare e rimuovere un \textsl{file di
   9}) nella modalità descritta, mentre la seconda (\texttt{\small 11--17}) lo
 cancella con \func{unlink}.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15.6cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/LockFile.c}
   \end{minipage} 
   \normalsize 
@@ -3135,9 +3134,9 @@ non consuma risorse permanentemente allocate nel sistema. Lo svantaggio è che,
 dovendo fare ricorso a delle operazioni sul filesystem, esso è in genere
 leggermente più lento.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15.6cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/MutexLocking.c}
   \end{minipage} 
   \normalsize 
@@ -3270,7 +3269,7 @@ una interfaccia completamente nuova, che tratteremo in questa sezione.
 
 Oggi Linux supporta tutti gli oggetti definito nello standard POSIX per l'IPC,
 ma a lungo non è stato così; la memoria condivisa è presente a partire dal
-kernel 2.4.x, i semafori sono forniti dalle \acr{glibc} nella sezione che
+kernel 2.4.x, i semafori sono forniti dalla \acr{glibc} nella sezione che
 implementa i \itindex{thread} \textit{thread} POSIX di nuova generazione che
 richiedono il kernel 2.6, le code di messaggi sono supportate a partire dal
 kernel 2.6.6.
@@ -3348,7 +3347,7 @@ relativi patch) occorre utilizzare la libreria \file{libmqueue}\footnote{i
   programmi che usano le code di messaggi cioè devono essere compilati
   aggiungendo l'opzione \code{-lmqueue} al comando \cmd{gcc}; in
   corrispondenza all'inclusione del supporto nel kernel ufficiale anche
-  \file{libmqueue} è stata inserita nelle \acr{glibc}, a partire dalla
+  \file{libmqueue} è stata inserita nella \acr{glibc}, a partire dalla
   versione 2.3.4 delle medesime.} che contiene le funzioni dell'interfaccia
 POSIX.\footnote{in realtà l'implementazione è realizzata tramite delle
   opportune chiamate ad \func{ioctl} sui file del filesystem speciale su cui
@@ -3454,7 +3453,7 @@ cui definizione è riportata in fig.~\ref{fig:ipc_mq_attr}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/mq_attr.h}
   \end{minipage} 
   \normalsize
@@ -3792,9 +3791,9 @@ il filesystem \texttt{tmpfs}, uno speciale filesystem che mantiene tutti i
 suoi contenuti in memoria, che viene attivato abilitando l'opzione
 \texttt{CONFIG\_TMPFS} in fase di compilazione del kernel.
 
-Per potere utilizzare l'interfaccia POSIX per la memoria condivisa le
-\acr{glibc}\footnote{le funzioni sono state introdotte con le glibc-2.2.}
-richiedono di compilare i programmi con l'opzione \code{-lrt}; inoltre è
+Per potere utilizzare l'interfaccia POSIX per la memoria condivisa la
+\acr{glibc}\footnote{le funzioni sono state introdotte con la versione 2.2.}
+richiede di compilare i programmi con l'opzione \code{-lrt}; inoltre è
 necessario che in \file{/dev/shm} sia montato un filesystem \texttt{tmpfs};
 questo di norma viene fatto aggiungendo una riga del tipo di:
 \begin{verbatim}
@@ -3903,9 +3902,9 @@ con lo stesso nome, la chiamata a \func{shm\_open} fallirà, a meno di non aver
 usato \const{O\_CREAT}, in quest'ultimo caso comunque si otterrà un file
 descriptor che fa riferimento ad un segmento distinto da eventuali precedenti.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15.6cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/MemShared.c}
   \end{minipage} 
   \normalsize 
@@ -3967,7 +3966,7 @@ dei semafori POSIX che li realizzava solo a livello di \itindex{thread}
   erano visibili solo all'interno dei \itindex{thread} \textit{thread} creati
   da un singolo processo, e non potevano essere usati come meccanismo di
   sincronizzazione fra processi diversi.} fornita attraverso la sezione delle
-estensioni \textit{real-time} delle \acr{glibc}.\footnote{quelle che si
+estensioni \textit{real-time} della \acr{glibc}.\footnote{quelle che si
   accedono collegandosi alla libreria \texttt{librt}.} Esisteva inoltre una
 libreria che realizzava (parzialmente) l'interfaccia POSIX usando le funzioni
 dei semafori di SysV IPC (mantenendo così tutti i problemi sottolineati in
@@ -3977,7 +3976,7 @@ A partire dal kernel 2.5.7 è stato introdotto un meccanismo di
 sincronizzazione completamente nuovo, basato sui cosiddetti
 \textit{futex},\footnote{la sigla sta per \textit{fast user mode mutex}.} con
 il quale è stato possibile implementare una versione nativa dei semafori
-POSIX.  Grazie a questo con i kernel della serie 2.6 e le nuove versioni delle
+POSIX.  Grazie a questo con i kernel della serie 2.6 e le nuove versioni della
 \acr{glibc} che usano questa nuova infrastruttura per quella che viene quella
 che viene chiamata \textit{New Posix Thread Library}, sono state implementate
 anche tutte le funzioni dell'interfaccia dei semafori POSIX.
@@ -4371,9 +4370,9 @@ scritti due semplici programmi con i quali è possibile rispettivamente
 monitorare il contenuto di un segmento di memoria condivisa e modificarne il
 contenuto. 
 
-\begin{figure}[!h]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/message_getter.c}
   \end{minipage} 
   \normalsize 
@@ -4444,9 +4443,9 @@ controllo. Il primo passo (\texttt{\small 30--34}) è quello di acquisire (con
 semaforo ad inizio del ciclo; seguito (\texttt{\small 35--36}) dal tempo
 corrente.
 
-\begin{figure}[!h]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/HandSigInt.c}
   \end{minipage} 
   \normalsize 
@@ -4471,9 +4470,9 @@ semplice e richiama le funzioni di rimozione sia per il segmento di memoria
 condivisa che per il semaforo, garantendo così che possa essere riaperto
 ex-novo senza errori in un futuro riutilizzo del comando.
 
-\begin{figure}[!h]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/message_setter.c}
   \end{minipage} 
   \normalsize