projects
/
gapil.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Inizio della revisione del formato per la suddivisione in due parti,
[gapil.git]
/
ipc.tex
diff --git
a/ipc.tex
b/ipc.tex
index bb9e0b06cece8f401be8ca380b54c8c570ef5960..cb30002d1525f2a3e83f798b88eb76bc3625c4b3 100644
(file)
--- a/
ipc.tex
+++ b/
ipc.tex
@@
-9,7
+9,7
@@
%% License".
%%
%% License".
%%
-\chapter{L
a
comunicazione fra processi}
+\chapter{L
'inter
comunicazione fra processi}
\label{cha:IPC}
\label{cha:IPC}
@@
-27,7
+27,7
@@
complessi ed evoluti come le RPC (\textit{Remote Procedure Calls}) e CORBA
implementati con un ulteriore livello sopra i meccanismi elementari.
implementati con un ulteriore livello sopra i meccanismi elementari.
-\section{L
a
comunicazione fra processi tradizionale}
+\section{L
'inter
comunicazione fra processi tradizionale}
\label{sec:ipc_unix}
Il primo meccanismo di comunicazione fra processi introdotto nei sistemi Unix,
\label{sec:ipc_unix}
Il primo meccanismo di comunicazione fra processi introdotto nei sistemi Unix,
@@
-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.
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.}
\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.
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
\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.
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
\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.
il cui codice completo è disponibile nel file \file{BarCodePage.c} che si
trova nella directory dei sorgenti.
-\begin{figure}[!htb]
+\begin{figure}[!htb
p
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/BarCodePage.c}
\end{minipage}
\normalsize
\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.
risultato dell'elaborazione del precedente, benché quest'ultimo venga invocato
dopo.
-\begin{figure}[!htb]
+\begin{figure}[!htb
p
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/BarCode.c}
\end{minipage}
\normalsize
\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.
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
\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}.
diverso da quelli preimpostati. Il codice completo è nel file
\file{FortuneServer.c}.
-\begin{figure}[!htb]
+\begin{figure}[!htb
p
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/FortuneServer.c}
\end{minipage}
\normalsize
\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.
principale del programma e le definizioni delle variabili. Il codice completo
è nel file \file{FortuneClient.c} dei sorgenti allegati.
-\begin{figure}[!htb]
+\begin{figure}[!htb
p
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/FortuneClient.c}
\end{minipage}
\normalsize
\includecodesample{listati/FortuneClient.c}
\end{minipage}
\normalsize
@@
-779,7
+779,7
@@
all'interno di uno stesso processo, ma fra processi distinti (torneremo su
questa funzionalità in sez.~\ref{sec:sock_fd_passing}).
questa funzionalità in sez.~\ref{sec:sock_fd_passing}).
-\section{
Il sistema di
comunicazione fra processi di System V}
+\section{
L'inter
comunicazione fra processi di System V}
\label{sec:ipc_sysv}
Benché le pipe e le fifo siano ancora ampiamente usate, esse scontano il
\label{sec:ipc_sysv}
Benché le pipe e le fifo siano ancora ampiamente usate, esse scontano il
@@
-839,7
+839,7
@@
mantiene varie proprietà ed informazioni associate all'oggetto.
\begin{figure}[!htb]
\footnotesize \centering
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\textwidth
}
\includestruct{listati/ipc_perm.h}
\end{minipage}
\normalsize
\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
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}, l
e
- \acr{glibc} usa
no
il prototipo specificato da XPG4, ma vengono lo stesso
+ SunOS, l'argomento \param{proj\_id} è dichiarato tipo \ctyp{char}, l
a
+ \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
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.
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}[!htb
p
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/IPCTestId.c}
\end{minipage}
\normalsize
\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/}.
\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}
\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{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\textwidth
}
\includestruct{listati/msqid_ds.h}
\end{minipage}
\normalsize
\includestruct{listati/msqid_ds.h}
\end{minipage}
\normalsize
@@
-1377,7
+1377,7
@@
dovrà essere pari a \const{LENGTH}).
\begin{figure}[!htb]
\footnotesize \centering
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\textwidth
}
\includestruct{listati/msgbuf.h}
\end{minipage}
\normalsize
\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.
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
\footnotesize \centering
- \begin{minipage}[c]{
15.6cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/MQFortuneServer.c}
\end{minipage}
\normalsize
\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}).
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
\footnotesize \centering
- \begin{minipage}[c]{
15.6cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/MQFortuneClient.c}
\end{minipage}
\normalsize
\includecodesample{listati/MQFortuneClient.c}
\end{minipage}
\normalsize
@@
-1796,7
+1796,7
@@
semaforo all'uscita del processo.
\begin{figure}[!htb]
\footnotesize \centering
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\textwidth
}
\includestruct{listati/semid_ds.h}
\end{minipage}
\normalsize
\includestruct{listati/semid_ds.h}
\end{minipage}
\normalsize
@@
-1838,7
+1838,7
@@
funzioni di controllo.
\begin{figure}[!htb]
\footnotesize \centering
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\textwidth
}
\includestruct{listati/sem.h}
\end{minipage}
\normalsize
\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{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\textwidth
}
\includestruct{listati/semun.h}
\end{minipage}
\normalsize
\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{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\textwidth
}
\includestruct{listati/sembuf.h}
\end{minipage}
\normalsize
\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.}
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}
\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à.
valore unitario per segnalare la disponibilità della risorsa, ed un valore
nullo per segnalarne l'indisponibilità.
-\begin{figure}[!
bht
]
+\begin{figure}[!
htbp
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/Mutex.c}
\end{minipage}
\normalsize
\includecodesample{listati/Mutex.c}
\end{minipage}
\normalsize
@@
-2380,7
+2380,7
@@
norma, significa insieme a dei semafori.
\begin{figure}[!htb]
\footnotesize \centering
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\textwidth
}
\includestruct{listati/shmid_ds.h}
\end{minipage}
\normalsize
\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.
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}
\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
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 all
e
\acr{glibc} il tipo di
+ \acr{libc4} e le \acr{libc5}, con il passaggio all
a
\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
\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.
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
\footnotesize \centering
- \begin{minipage}[c]{
15.6cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/SharedMem.c}
\end{minipage}
\normalsize
\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}.
video; al solito il codice completo si trova con i sorgenti allegati nel file
\file{DirMonitor.c}.
-\begin{figure}[!htb]
+\begin{figure}[!htb
p
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15.6cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/DirMonitor.c}
\end{minipage}
\normalsize
\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.
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}[!htb
p
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15.6cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/ComputeValues.c}
\end{minipage}
\normalsize
\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}).
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}[!htb
p
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15.6 cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/ReadMonitor.c}
\end{minipage}
\normalsize
\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}.
%% 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
%% \centering
%% \includegraphics[width=10cm]{img/shmstruct}
%% \caption{Schema dell'implementazione dei segmenti di memoria condivisa in
@@
-3028,6
+3027,12
@@
combinato della memoria condivisa e dei meccanismi di sincronizzazione, per
cui alla fine l'uso delle code di messaggi classiche è relativamente poco
diffuso.
cui alla fine l'uso delle code di messaggi classiche è relativamente poco
diffuso.
+% TODO: trattare qui, se non ssis trova posto migliore, copy_from_process e
+% copy_to_process, introdotte con il kernel 3.2. Vedi
+% http://lwn.net/Articles/405346/ e
+% http://ozlabs.org/~cyeoh/cma/process_vm_readv.txt
+
+
\subsection{I \textsl{file di lock}}
\label{sec:ipc_file_lock}
\subsection{I \textsl{file di lock}}
\label{sec:ipc_file_lock}
@@
-3065,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}.
9}) nella modalità descritta, mentre la seconda (\texttt{\small 11--17}) lo
cancella con \func{unlink}.
-\begin{figure}[!htb]
+\begin{figure}[!htb
p
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15.6cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/LockFile.c}
\end{minipage}
\normalsize
\includecodesample{listati/LockFile.c}
\end{minipage}
\normalsize
@@
-3129,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.
dovendo fare ricorso a delle operazioni sul filesystem, esso è in genere
leggermente più lento.
-\begin{figure}[!htb]
+\begin{figure}[!htb
p
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15.6cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/MutexLocking.c}
\end{minipage}
\normalsize
\includecodesample{listati/MutexLocking.c}
\end{minipage}
\normalsize
@@
-3249,7
+3254,7
@@
sez.~\ref{sec:ipc_sysv_shm} che possa restituisca i risultati via rete.
% TODO fare esempio di mmap anonima
% TODO fare esempio di mmap anonima
-\section{
Il sistema di
comunicazione fra processi di POSIX}
+\section{
L'inter
comunicazione fra processi di POSIX}
\label{sec:ipc_posix}
Per superare i numerosi problemi del \textit{SysV IPC}, evidenziati per i suoi
\label{sec:ipc_posix}
Per superare i numerosi problemi del \textit{SysV IPC}, evidenziati per i suoi
@@
-3264,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
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 dall
e
\acr{glibc} nella sezione che
+kernel 2.4.x, i semafori sono forniti dall
a
\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.
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.
@@
-3342,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
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 nell
e
\acr{glibc}, a partire dalla
+ \file{libmqueue} è stata inserita nell
a
\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
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
@@
-3448,7
+3453,7
@@
cui definizione è riportata in fig.~\ref{fig:ipc_mq_attr}.
\begin{figure}[!htb]
\footnotesize \centering
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\textwidth
}
\includestruct{listati/mq_attr.h}
\end{minipage}
\normalsize
\includestruct{listati/mq_attr.h}
\end{minipage}
\normalsize
@@
-3786,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.
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 l
e
-\acr{glibc}\footnote{le funzioni sono state introdotte con l
e glibc-
2.2.}
-richied
ono
di compilare i programmi con l'opzione \code{-lrt}; inoltre è
+Per potere utilizzare l'interfaccia POSIX per la memoria condivisa l
a
+\acr{glibc}\footnote{le funzioni sono state introdotte con l
a versione
2.2.}
+richied
e
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}
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}
@@
-3897,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.
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}[!htb
p
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15.6cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/MemShared.c}
\end{minipage}
\normalsize
\includecodesample{listati/MemShared.c}
\end{minipage}
\normalsize
@@
-3961,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
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} dell
e
\acr{glibc}.\footnote{quelle che si
+estensioni \textit{real-time} dell
a
\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
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
@@
-3971,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
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 dell
e
+POSIX. Grazie a questo con i kernel della serie 2.6 e le nuove versioni dell
a
\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.
\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.
@@
-4365,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.
monitorare il contenuto di un segmento di memoria condivisa e modificarne il
contenuto.
-\begin{figure}[!h]
+\begin{figure}[!h
tbp
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/message_getter.c}
\end{minipage}
\normalsize
\includecodesample{listati/message_getter.c}
\end{minipage}
\normalsize
@@
-4438,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.
semaforo ad inizio del ciclo; seguito (\texttt{\small 35--36}) dal tempo
corrente.
-\begin{figure}[!h]
+\begin{figure}[!h
tbp
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/HandSigInt.c}
\end{minipage}
\normalsize
\includecodesample{listati/HandSigInt.c}
\end{minipage}
\normalsize
@@
-4465,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.
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}[!h
tbp
]
\footnotesize \centering
\footnotesize \centering
- \begin{minipage}[c]{
15cm
}
+ \begin{minipage}[c]{
\codesamplewidth
}
\includecodesample{listati/message_setter.c}
\end{minipage}
\normalsize
\includecodesample{listati/message_setter.c}
\end{minipage}
\normalsize