Aggiornamento note di copyright
[gapil.git] / fileadv.tex
index 9d43dd4b98fa764d0542ee17bee639a22650e942..9b1ee1ed5f1ad1c7e60cb8faba1704905bbd1b2a 100644 (file)
@@ -1,6 +1,6 @@
 %% fileadv.tex
 %%
-%% Copyright (C) 2000-2012 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2013 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",
@@ -1166,10 +1166,10 @@ caso di interruzione.\footnote{in realtà la system call di Linux aggiorna il
   questo comportamento passando alla system call una variabile locale, in modo
   da mantenere l'aderenza allo standard POSIX che richiede che il valore di
   \param{timeout} non sia modificato.} Inoltre prende un argomento aggiuntivo
-\param{sigmask} che è il puntatore ad una maschera di segnali (si veda
-sez.~\ref{sec:sig_sigmask}).  La maschera corrente viene sostituita da questa
-immediatamente prima di eseguire l'attesa, e ripristinata al ritorno della
-funzione.
+\param{sigmask} che è il puntatore ad una \index{maschera~dei~segnali}
+maschera di segnali (si veda sez.~\ref{sec:sig_sigmask}).  La maschera
+corrente viene sostituita da questa immediatamente prima di eseguire l'attesa,
+e ripristinata al ritorno della funzione.
 
 L'uso di \param{sigmask} è stato introdotto allo scopo di prevenire possibili
 \textit{race condition} \itindex{race~condition} quando ci si deve porre in
@@ -1402,11 +1402,12 @@ prototipo è:
 \end{prototype}
 
 La funzione ha lo stesso comportamento di \func{poll}, solo che si può
-specificare, con l'argomento \param{sigmask}, il puntatore ad una maschera di
-segnali; questa sarà la maschera utilizzata per tutto il tempo che la funzione
-resterà in attesa, all'uscita viene ripristinata la maschera originale.  L'uso
-di questa funzione è cioè equivalente, come illustrato nella pagina di
-manuale, all'esecuzione atomica del seguente codice:
+specificare, con l'argomento \param{sigmask}, il puntatore ad una
+\index{maschera~dei~segnali} maschera di segnali; questa sarà la maschera
+utilizzata per tutto il tempo che la funzione resterà in attesa, all'uscita
+viene ripristinata la maschera originale.  L'uso di questa funzione è cioè
+equivalente, come illustrato nella pagina di manuale, all'esecuzione atomica
+del seguente codice:
 \includecodesnip{listati/ppoll_means.c} 
 
 Eccetto per \param{timeout}, che come per \func{pselect} deve essere un
@@ -1613,6 +1614,9 @@ delle operazioni cui fanno riferimento.
   \label{tab:epoll_ctl_operation}
 \end{table}
 
+% aggiunta EPOLL_CTL_DISABLE con il kernel 3.7, vedi
+% http://lwn.net/Articles/520012/ e http://lwn.net/Articles/520198/
+
 La funzione prende sempre come primo argomento un file descriptor di
 \textit{epoll}, \param{epfd}, che deve essere stato ottenuto in precedenza con
 una chiamata a \func{epoll\_create}. L'argomento \param{fd} indica invece il
@@ -1708,6 +1712,9 @@ identificazione del file descriptor.
 \footnotetext[48]{questa modalità è disponibile solo a partire dal kernel
   2.6.2.}
 
+% TODO aggiunto EPOLLWAKEUP con il 3.5
+
+
 Le modalità di utilizzo di \textit{epoll} prevedono che si definisca qual'è
 l'insieme dei file descriptor da tenere sotto controllo tramite un certo
 \textit{epoll descriptor} \param{epfd} attraverso una serie di chiamate a
@@ -1828,12 +1835,12 @@ Come già per \func{select} e \func{poll} anche per l'interfaccia di
 \textit{epoll} si pone il problema di gestire l'attesa di segnali e di dati
 contemporaneamente per le osservazioni fatte in sez.~\ref{sec:file_select},
 per fare questo di nuovo è necessaria una variante della funzione di attesa
-che consenta di reimpostare all'uscita una maschera di segnali, analoga alle
-estensioni \func{pselect} e \func{ppoll} che abbiamo visto in precedenza per
-\func{select} e \func{poll}; in questo caso la funzione si chiama
-\funcd{epoll\_pwait}\footnote{la funziona è stata introdotta a partire dal
-  kernel 2.6.19, ed è come tutta l'interfaccia di \textit{epoll}, specifica di
-  Linux.} ed il suo prototipo è:
+che consenta di reimpostare all'uscita una \index{maschera~dei~segnali}
+maschera di segnali, analoga alle estensioni \func{pselect} e \func{ppoll} che
+abbiamo visto in precedenza per \func{select} e \func{poll}; in questo caso la
+funzione si chiama \funcd{epoll\_pwait}\footnote{la funziona è stata
+  introdotta a partire dal kernel 2.6.19, ed è come tutta l'interfaccia di
+  \textit{epoll}, specifica di Linux.} ed il suo prototipo è:
 \begin{prototype}{sys/epoll.h} 
   {int epoll\_pwait(int epfd, struct epoll\_event * events, int maxevents, 
     int timeout, const sigset\_t *sigmask)}
@@ -1848,10 +1855,10 @@ estensioni \func{pselect} e \func{ppoll} che abbiamo visto in precedenza per
 \end{prototype}
 
 La funzione è del tutto analoga \funcd{epoll\_wait}, soltanto che alla sua
-uscita viene ripristinata la maschera di segnali originale, sostituita durante
-l'esecuzione da quella impostata con l'argomento \param{sigmask}; in sostanza
-la chiamata a questa funzione è equivalente al seguente codice, eseguito però
-in maniera atomica:
+uscita viene ripristinata la \index{maschera~dei~segnali} maschera di segnali
+originale, sostituita durante l'esecuzione da quella impostata con
+l'argomento \param{sigmask}; in sostanza la chiamata a questa funzione è
+equivalente al seguente codice, eseguito però in maniera atomica:
 \includecodesnip{listati/epoll_pwait_means.c} 
 
 Si tenga presente che come le precedenti funzioni di \textit{I/O multiplexing}
@@ -1939,8 +1946,8 @@ descriptor è \funcd{signalfd},\footnote{in realtà quella riportata è
   versione, \funcm{signalfd4}, introdotta con il kernel 2.6.27 e che è quella
   che viene sempre usata a partire dalle \acr{glibc} 2.9, che prende un
   argomento aggiuntivo \code{size\_t sizemask} che indica la dimensione della
-  maschera dei segnali, il cui valore viene impostato automaticamente dalle
-  \acr{glibc}.}  il cui prototipo è:
+  \index{maschera~dei~segnali} maschera dei segnali, il cui valore viene
+  impostato automaticamente dalle \acr{glibc}.}  il cui prototipo è:
 \begin{prototype}{sys/signalfd.h} 
   {int signalfd(int fd, const sigset\_t *mask, int flags)}
 
@@ -1975,13 +1982,13 @@ con \param{fd}, in caso di errore invece verrà restituito $-1$.
 
 L'elenco dei segnali che si vogliono gestire con \func{signalfd} deve essere
 specificato tramite l'argomento \param{mask}. Questo deve essere passato come
-puntatore ad una maschera di segnali creata con l'uso delle apposite macro già
-illustrate in sez.~\ref{sec:sig_sigset}. La maschera deve indicare su quali
-segnali si intende operare con \func{signalfd}; l'elenco può essere modificato
-con una successiva chiamata a \func{signalfd}. Dato che \signal{SIGKILL} e
-\signal{SIGSTOP} non possono essere intercettati (e non prevedono neanche la
-possibilità di un gestore) un loro inserimento nella maschera verrà ignorato
-senza generare errori. 
+puntatore ad una \index{maschera~dei~segnali} maschera di segnali creata con
+l'uso delle apposite macro già illustrate in sez.~\ref{sec:sig_sigset}. La
+maschera deve indicare su quali segnali si intende operare con
+\func{signalfd}; l'elenco può essere modificato con una successiva chiamata a
+\func{signalfd}. Dato che \signal{SIGKILL} e \signal{SIGSTOP} non possono
+essere intercettati (e non prevedono neanche la possibilità di un gestore) un
+loro inserimento nella maschera verrà ignorato senza generare errori.
 
 L'argomento \param{flags} consente di impostare direttamente in fase di
 creazione due flag per il file descriptor analoghi a quelli che si possono
@@ -2139,13 +2146,13 @@ Il primo passo (\texttt{\small 19--20}) è la crezione di un file descriptor
 quello che useremo per il controllo degli altri.  É poi necessario
 disabilitare la ricezione dei segnali (nel caso \signal{SIGINT},
 \signal{SIGQUIT} e \signal{SIGTERM}) per i quali si vuole la notifica tramite
-file descriptor. Per questo prima li si inseriscono (\texttt{\small 22--25}) in
-una maschera di segnali \texttt{sigmask} che useremo con (\texttt{\small 26})
-\func{sigprocmask} per disabilitarli.  Con la stessa maschera si potrà per
-passare all'uso (\texttt{\small 28--29}) di \func{signalfd} per abilitare la
-notifica sul file descriptor \var{sigfd}. Questo poi (\texttt{\small 30--33})
-dovrà essere aggiunto con \func{epoll\_ctl} all'elenco di file descriptor
-controllati con \texttt{epfd}.
+file descriptor. Per questo prima li si inseriscono (\texttt{\small 22--25})
+in una \index{maschera~dei~segnali} maschera di segnali \texttt{sigmask} che
+useremo con (\texttt{\small 26}) \func{sigprocmask} per disabilitarli.  Con la
+stessa maschera si potrà per passare all'uso (\texttt{\small 28--29}) di
+\func{signalfd} per abilitare la notifica sul file descriptor
+\var{sigfd}. Questo poi (\texttt{\small 30--33}) dovrà essere aggiunto con
+\func{epoll\_ctl} all'elenco di file descriptor controllati con \texttt{epfd}.
 
 Occorrerà infine (\texttt{\small 35--38}) creare la \textit{named fifo} se
 questa non esiste ed aprirla per la lettura (\texttt{\small 39--40}); una
@@ -2475,7 +2482,7 @@ operazioni di I/O volute.
 
 
 \subsection{Il \textit{Signal driven I/O}}
-\label{sec:file_signal_driven_io}
+\label{sec:signal_driven_io}
 
 \itindbeg{signal~driven~I/O}
 
@@ -3873,6 +3880,10 @@ tab.~\ref{tab:file_mmap_flag}.
 %     \const{MAP\_DONTEXPAND}& Non consente una successiva espansione dell'area
 %                              mappata con \func{mremap}, proposto ma pare non
 %                              implementato.\\
+%     \const{MAP\_HUGETLB}& da trattare.\\
+% TODO trattare MAP_HUGETLB introdotto con il kernel 2.6.32, e modifiche
+% introdotte con il 3.8 per le dimensioni variabili delle huge pages
+
     \hline
   \end{tabular}
   \caption{Valori possibili dell'argomento \param{flag} di \func{mmap}.}
@@ -4498,7 +4509,7 @@ indicato dal valore dalla costante \const{IOV\_MAX}, definita come le altre
 costanti analoghe (vedi sez.~\ref{sec:sys_limits}) in \headfile{limits.h}; lo
 stesso valore deve essere ottenibile in esecuzione tramite la funzione
 \func{sysconf} richiedendo l'argomento \const{\_SC\_IOV\_MAX} (vedi
-sez.~\ref{sec:sys_sysconf}).
+sez.~\ref{sec:sys_limits}).
 
 Nel caso di Linux il limite di sistema è di 1024, però se si usano le
 \acr{glibc} queste forniscono un \textit{wrapper} per le system call che si