Sistemata la parte della allocazione della memoria, le variadic
[gapil.git] / ipc.tex
diff --git a/ipc.tex b/ipc.tex
index 25f0f301bedd7480c59dbddf8faed23d3885171a..c7af63283aa8f317c9b47ccd05779bfefaf91b3a 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
@@ -114,7 +114,7 @@ essere bloccante (qualora non siano presenti dati), inoltre se si legge da una
 pipe il cui capo in scrittura è stato chiuso, si avrà la ricezione di un EOF
 (vale a dire che la funzione \func{read} ritornerà restituendo 0).  Se invece
 si esegue una scrittura su una pipe il cui capo in lettura non è aperto il
-processo riceverà il segnale \const{SIGPIPE}, e la funzione di scrittura
+processo riceverà il segnale \signal{SIGPIPE}, e la funzione di scrittura
 restituirà un errore di \errcode{EPIPE} (al ritorno del gestore, o qualora il
 segnale sia ignorato o bloccato).
 
@@ -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 
@@ -707,7 +707,7 @@ complessa e continua ad avere vari inconvenienti\footnote{lo stesso Stevens,
   che esamina questa architettura in \cite{APUE}, nota come sia impossibile
   per il server sapere se un client è andato in crash, con la possibilità di
   far restare le fifo temporanee sul filesystem, di come sia necessario
-  intercettare \const{SIGPIPE} dato che un client può terminare dopo aver
+  intercettare \signal{SIGPIPE} dato che un client può terminare dopo aver
   fatto una richiesta, ma prima che la risposta sia inviata (cosa che nel
   nostro esempio non è stata fatta).}; in generale infatti l'interfaccia delle
 fifo non è adatta a risolvere questo tipo di problemi, che possono essere
@@ -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
@@ -2609,7 +2608,7 @@ L'uso di \const{SHM\_RDONLY} permette di agganciare il segmento in sola
 lettura (si ricordi che anche le pagine di memoria hanno dei permessi), in tal
 caso un tentativo di scrivere sul segmento comporterà una
 \itindex{segment~violation} violazione di accesso con l'emissione di un
-segnale di \const{SIGSEGV}. Il comportamento usuale di \func{shmat} è quello
+segnale di \signal{SIGSEGV}. Il comportamento usuale di \func{shmat} è quello
 di agganciare il segmento con l'accesso in lettura e scrittura (ed il processo
 deve aver questi permessi in \var{shm\_perm}), non è prevista la possibilità
 di agganciare un segmento in sola scrittura.
@@ -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 
@@ -2750,14 +2749,14 @@ ricavare la parte di informazione che interessa.
 
 In fig.~\ref{fig:ipc_dirmonitor_main} si è riportata la sezione principale del
 corpo del programma server, insieme alle definizioni delle altre funzioni
-usate nel programma e delle variabili globali, omettendo tutto quello che
-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}.
+usate nel programma e delle \index{variabili!globali} variabili globali,
+omettendo tutto quello che 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 
@@ -2765,11 +2764,11 @@ video; al solito il codice completo si trova con i sorgenti allegati nel file
   \label{fig:ipc_dirmonitor_main}
 \end{figure}
 
-Il programma usa delle variabili globali (\texttt{\small 2--14}) per mantenere
-i valori relativi agli oggetti usati per la comunicazione inter-processo; si è
-definita inoltre una apposita struttura \struct{DirProp} che contiene i dati
-relativi alle proprietà che si vogliono mantenere nella memoria condivisa, per
-l'accesso da parte dei client.
+Il programma usa delle \index{variabili!globali} variabili globali
+(\texttt{\small 2--14}) per mantenere i valori relativi agli oggetti usati per
+la comunicazione inter-processo; si è definita inoltre una apposita struttura
+\struct{DirProp} che contiene i dati relativi alle proprietà che si vogliono
+mantenere nella memoria condivisa, per l'accesso da parte dei client.
 
 Il programma, dopo la sezione, omessa, relativa alla gestione delle opzioni da
 riga di comando (che si limitano alla eventuale stampa di un messaggio di
@@ -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 
@@ -2847,8 +2846,8 @@ Il codice di quest'ultima è riportato in fig.~\ref{fig:ipc_dirmonitor_sub}.
 Come si vede la funzione (\texttt{\small 2--16}) è molto semplice e si limita
 a chiamare (\texttt{\small 5}) la funzione \func{stat} sul file indicato da
 ciascuna voce, per ottenerne i dati, che poi utilizza per incrementare i vari
-contatori nella memoria condivisa, cui accede grazie alla variabile globale
-\var{shmptr}.
+contatori nella memoria condivisa, cui accede grazie alla
+\index{variabili!globali} variabile globale \var{shmptr}.
 
 Dato che la funzione è chiamata da \func{DirScan}, si è all'interno del ciclo
 principale del programma, con un mutex acquisito, perciò non è necessario
@@ -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 
@@ -2959,7 +2958,7 @@ Totale  72 file, per 489887 byte
 %$
 
 A questo punto possiamo far uscire il server inviandogli un segnale di
-\const{SIGTERM} con il comando \code{killall dirmonitor}, a questo punto
+\signal{SIGTERM} con il comando \code{killall dirmonitor}, a questo punto
 ripetendo la lettura, otterremo un errore:
 \begin{Verbatim}
 [piccardi@gont sources]$ ./readmon 
@@ -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.
@@ -4315,8 +4314,8 @@ Qualora il semaforo debba essere condiviso dai \itindex{thread}
 \textit{thread} di uno stesso processo (nel qual caso si parla di
 \textit{thread-shared semaphore}), occorrerà che \param{sem} sia l'indirizzo
 di una variabile visibile da tutti i \itindex{thread} \textit{thread}, si
-dovrà usare cioè una variabile globale o una variabile allocata dinamicamente
-nello \itindex{heap} \textit{heap}.
+dovrà usare cioè una \index{variabili!globali} variabile globale o una
+variabile allocata dinamicamente nello \itindex{heap} \textit{heap}.
 
 Qualora il semaforo debba essere condiviso fra più processi (nel qual caso si
 parla di \textit{process-shared semaphore}) la sola scelta possibile per
@@ -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 
@@ -4398,9 +4397,9 @@ dall'altro programma prima di averla finita di stampare.
 
 La parte iniziale del programma contiene le definizioni (\texttt{\small 1--8})
 del gestore del segnale usato per liberare le risorse utilizzate, delle
-variabili globali contenenti i nomi di default del segmento di memoria
-condivisa e del semaforo (il default scelto è \texttt{messages}), e delle
-altre variabili utilizzate dal programma.
+\index{variabili!globali} variabili globali contenenti i nomi di default del
+segmento di memoria condivisa e del semaforo (il default scelto è
+\texttt{messages}), e delle altre variabili utilizzate dal programma.
 
 Come prima istruzione (\texttt{\small 10}) si è provveduto ad installare un
 gestore di segnale che consentirà di effettuare le operazioni di pulizia
@@ -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 
@@ -4464,16 +4463,16 @@ ciclo.
 
 Per uscire in maniera corretta dal programma sarà necessario interromperlo con
 il break da tastiera (\texttt{C-c}), che corrisponde all'invio del segnale
-\const{SIGINT}, per il quale si è installato (\texttt{\small 10}) una
+\signal{SIGINT}, per il quale si è installato (\texttt{\small 10}) una
 opportuna funzione di gestione, riportata in
 fig.~\ref{fig:ipc_posix_sem_shm_message_server_handler}. La funzione è molto
 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