%% ipc.tex
%%
-%% Copyright (C) 2000-2016 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2018 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
\end{figure}
Della funzione di sistema esiste una seconda versione, \funcd{pipe2},
-introdotta con il kernel 2.6.27 e le \acr{glibc} 2.9 e specifica di Linux
+introdotta con il kernel 2.6.27 e la \acr{glibc} 2.9 e specifica di Linux
(utilizzabile solo definendo la macro \macro{\_GNU\_SOURCE}), che consente di
impostare atomicamente le caratteristiche dei file descriptor restituiti, il
suo prototipo è:
\textit{pipe} creata, che sarà aperto in sola lettura (e quindi associato allo
\textit{standard output} del programma indicato) in caso si sia indicato
\code{r}, o in sola scrittura (e quindi associato allo \textit{standard
- input}) in caso di \code{w}. A partire dalla versione 2.9 delle \acr{glibc}
+ input}) in caso di \code{w}. A partire dalla versione 2.9 della \acr{glibc}
(questa è una estensione specifica di Linux) all'argomento \param{type} può
essere aggiunta la lettera ``\texttt{e}'' per impostare automaticamente il
flag di \textit{close-on-exec} sul file descriptor sottostante (si ricordi
direttamente (in lettura o scrittura) all'oggetto. In tal caso lo schema dei
controlli è simile a quello dei file, ed avviene secondo questa sequenza:
\begin{itemize*}
-\item se il processo ha i privilegi di amministratore (più precisamente la
- capacità \const{CAP\_IPC\_OWNER}) l'accesso è sempre consentito.
+\item se il processo ha i privilegi di amministratore (più precisamente
+ \const{CAP\_IPC\_OWNER}) l'accesso è sempre consentito.
\item se l'\ids{UID} effettivo del processo corrisponde o al valore del campo
\var{cuid} o a quello del campo \var{uid} ed il permesso per il proprietario
in \var{mode} è appropriato\footnote{per appropriato si intende che è
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{.90\textwidth}
+ \begin{minipage}[c]{.91\textwidth}
\includestruct{listati/msqid_ds.h}
\end{minipage}
\normalsize
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{.80\textwidth}
+ \begin{minipage}[c]{.85\textwidth}
\includestruct{listati/semid_ds.h}
\end{minipage}
\normalsize
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{.80\textwidth}
+ \begin{minipage}[c]{.85\textwidth}
\includestruct{listati/sem.h}
\end{minipage}
\normalsize
\struct{semun}, la cui definizione, con i possibili valori che può assumere, è
riportata in fig.~\ref{fig:ipc_semun}.
-Nelle versioni più vecchie delle \acr{glibc} questa unione veniva definita in
+Nelle versioni più vecchie della \acr{glibc} questa unione veniva definita in
\file{sys/sem.h}, ma nelle versioni più recenti questo non avviene più in
quanto lo standard POSIX.1-2001 richiede che sia sempre definita a cura del
-chiamante. In questa seconda evenienza le \acr{glibc} definiscono però la
+chiamante. In questa seconda evenienza la \acr{glibc} definisce però la
macro \macrod{\_SEM\_SEMUN\_UNDEFINED} che può essere usata per controllare la
situazione.
Con lo standard POSIX.1-2001 è stata introdotta una variante di \func{semop}
che consente di specificare anche un tempo massimo di attesa. La nuova
-funzione di sistema, disponibile a partire dal kernel 2.4.22 e dalle
+funzione di sistema, disponibile a partire dal kernel 2.4.22 e dalla
\acr{glibc} 2.3.3, ed utilizzabile solo dopo aver definito la macro
\macro{\_GNU\_SOURCE}, è \funcd{semtimedop}, ed il suo prototipo è:
poi quest'ultimo viene messo stato di attesa e viene invocato lo
\textit{scheduler} per passare all'esecuzione di un altro processo.
-Se invece tutte le operazioni possono avere successo queste vengono eseguite
+Se invece tutte le operazioni possono avere successo vengono eseguite
immediatamente, dopo di che il kernel esegue una scansione della coda di
attesa (a partire da \var{sem\_pending}) per verificare se qualcuna delle
operazioni sospese in precedenza può essere eseguita, nel qual caso la
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 alla \acr{glibc} il tipo di
+ come il valore di ritorno della funzione; in Linux è stato così con la
+ \acr{libc4} e la \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 *} seguendo POSIX.1-2001.} deve essere associato il
segmento, se il valore specificato è \val{NULL} è il sistema a scegliere
di \errcode{EINVAL}. Se \param{attr} è un puntatore nullo gli attributi della
coda saranno impostati ai valori predefiniti.
-I suddetti limiti di sistema sono impostati attraverso altrettanti file in
-\texttt{/proc/sys/fs/mqueue}, in particolare i file che controllano i valori
-dei limiti sono:
+I suddetti limiti di sistema sono impostati attraverso una serie di file
+presenti sotto \texttt{/proc/sys/fs/mqueue}, in particolare i file che
+controllano i valori dei limiti sono:
\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
\item[\sysctlfiled{fs/mqueue/msg\_max}] Indica il valore massimo del numero di
messaggi in una coda e agisce come limite superiore per il valore di
La funzione è analoga a \func{close},\footnote{su Linux, dove le code sono
implementate come file su un filesystem dedicato, è esattamente la stessa
funzione, per cui non esiste una \textit{system call} autonoma e la funzione
- viene rimappata su \func{close} dalle \acr{glibc}.} dopo la sua esecuzione
+ viene rimappata su \func{close} dalla \acr{glibc}.} dopo la sua esecuzione
il processo non sarà più in grado di usare il descrittore della coda, ma
quest'ultima continuerà ad esistere nel sistema e potrà essere acceduta con
un'altra chiamata a \func{mq\_open}. All'uscita di un processo tutte le code
Se quest'ultima eccede la dimensione massima specificata da \var{mq\_msgsize}
le funzioni ritornano immediatamente con un errore di \errcode{EMSGSIZE}.
-L'argomento \param{msg\_prio} indica la priorità dell'argomento, che, essendo
-definito come \ctyp{unsigned int}, è sempre un intero positivo. I messaggi di
+L'argomento \param{msg\_prio} indica la priorità dell'argomento che essendo
+definito come \ctyp{unsigned int} è sempre un intero positivo. I messaggi di
priorità maggiore vengono inseriti davanti a quelli di priorità inferiore, e
quindi saranno riletti per primi. A parità del valore della priorità il
messaggio sarà inserito in coda a tutti quelli che hanno la stessa priorità
eseguite da \file{message\_getter}). Terminato il tempo di attesa si rilascerà
(\texttt{\small 29-32}) il semaforo per poi uscire.
-Per verificare il funzionamento dei programmi occorrerà lanciare per primo
-\file{message\_getter}\footnote{lanciare per primo \file{message\_setter} darà
- luogo ad un errore, non essendo stati creati il semaforo ed il segmento di
- memoria condivisa.} che inizierà a stampare una volta al secondo il
-contenuto del messaggio ed i suoi dati, con qualcosa del tipo:
+Per verificare il funzionamento dei programmi occorrerà lanciare prima
+\file{message\_getter} (lanciare per primo \file{message\_setter} darebbe
+luogo ad un errore, non essendo stati creati il semaforo ed il segmento di
+memoria condivisa) che inizierà a stampare una volta al secondo il contenuto
+del messaggio ed i suoi dati, con qualcosa del tipo:
\begin{Console}
piccardi@hain:~/gapil/sources$ \textbf{./message_getter messaggio}
sem=1, Fri Dec 31 14:12:41 2010
\end{Console}
%$
dove il programma si fermerà per 3 secondi prima di rilasciare il semaforo e
-terminare.
-
-L'effetto di questo programma si potrà però apprezzare meglio nell'uscita di
-\file{message\_getter}, che verrà interrotta per questo stesso tempo, prima di
+terminare. L'effetto di tutto ciò si potrà vedere nell'\textit{output} di
+\file{message\_getter}, che verrà interrotto per questo stesso tempo, prima di
ricominciare con il nuovo testo:
\begin{Console}
...