Alcune correzioni ai font dei link, e una trattazione esplicita
[gapil.git] / signal.tex
index e86d9d283bd356455f6bab7369c467ef7d539668..3341dae969d87ab82ed22ce395f45d56de199032 100644 (file)
@@ -390,7 +390,7 @@ momento della ricezione del segnale.
     \const{SIGTRAP}  &SL & C & Trappole per un Trace/breakpoint.             \\
     \const{SIGURG}   &SLB& B & Ricezione di una \textit{urgent condition} su 
                                un socket. \\
-    \const{SIGVTALRM}&SLB& A & Virtual alarm clock.                          \\
+    \const{SIGVTALRM}&SLB& A & Timer di esecuzione scaduto.                  \\
     \const{SIGXCPU}  &SLB& C & Ecceduto il limite sul tempo di CPU.          \\
     \const{SIGXFSZ}  &SLB& C & Ecceduto il limite sulla dimensione dei file. \\
     \const{SIGIOT}   &L  & C & IOT trap. Sinonimo di \const{SIGABRT}.        \\
@@ -563,16 +563,17 @@ segnali sono:
 \subsection{I segnali di allarme}
 \label{sec:sig_alarm}
 
-Questi segnali sono generati dalla scadenza di un timer. Il loro comportamento
-predefinito è quello di causare la terminazione del programma, ma con questi
-segnali la scelta predefinita è irrilevante, in quanto il loro uso presuppone
-sempre la necessità di un gestore.  Questi segnali sono:
+Questi segnali sono generati dalla scadenza di un timer (vedi
+sez.~\ref{sec:sig_alarm_abort}). Il loro comportamento predefinito è quello di
+causare la terminazione del programma, ma con questi segnali la scelta
+predefinita è irrilevante, in quanto il loro uso presuppone sempre la
+necessità di un gestore.  Questi segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
 \item[\const{SIGALRM}] Il nome sta per \textit{alarm}. Segnale la scadenza di
   un timer misurato sul tempo reale o sull'orologio di sistema. È normalmente
   usato dalla funzione \func{alarm}.
 
-\item[\const{SIGVTALRM}] Il nome sta per \textit{virtual alarm}. È analogo al
+\item[\const{SIVGTALRM}] Il nome sta per \textit{virtual alarm}. È analogo al
   precedente ma segnala la scadenza di un timer sul tempo di CPU usato dal
   processo. 
 
@@ -761,7 +762,7 @@ indicizzate per numero di segnale, per cui una chiamata del tipo di \code{char
 
 
 
-\section{La gestione dei segnali}
+\section{La gestione di base dei segnali}
 \label{sec:sig_management}
 
 I segnali sono il primo e più classico esempio di eventi asincroni, cioè di
@@ -997,9 +998,9 @@ prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore nel qual caso \var{errno} assumerà uno dei valori:
     \begin{errlist}
-    \item[\errcode{EINVAL}] Il segnale specificato non esiste.
-    \item[\errcode{ESRCH}] Il processo selezionato non esiste.
-    \item[\errcode{EPERM}] Non si hanno privilegi sufficienti ad inviare il
+    \item[\errcode{EINVAL}] il segnale specificato non esiste.
+    \item[\errcode{ESRCH}] il processo selezionato non esiste.
+    \item[\errcode{EPERM}] non si hanno privilegi sufficienti ad inviare il
       segnale.
     \end{errlist}}
 \end{functions}
@@ -1215,6 +1216,8 @@ significa circa 10~ms). Il sistema assicura comunque che il segnale non sar
 mai generato prima della scadenza programmata (l'arrotondamento cioè è sempre
 effettuato per eccesso).  
 
+% TODO: verificare cose è successo con l'introduzione nel kernel degli htrimer
+
 Una seconda causa di potenziali ritardi è che il segnale viene generato alla
 scadenza del timer, ma poi deve essere consegnato al processo; se quest'ultimo
 è attivo (questo è sempre vero per \const{ITIMER\_VIRT}) la consegna è
@@ -1227,7 +1230,6 @@ in cui un timer scade prima che il segnale di una precedente scadenza sia
 stato consegnato; in questo caso, per il comportamento dei segnali descritto
 in sez.~\ref{sec:sig_sigchld}, un solo segnale sarà consegnato.
 
-
 Dato che sia \func{alarm} che \func{setitimer} non consentono di leggere il
 valore corrente di un timer senza modificarlo, è possibile usare la funzione
 \funcd{getitimer}, il cui prototipo è:
@@ -1472,8 +1474,8 @@ tutti gli stati di terminazione sono stati ricevuti.
 
 
 
-\section{Gestione avanzata}
-\label{sec:sig_control}
+\section{La gestione avanzata dei segnali}
+\label{sec:sig_adv_control}
 
 Le funzioni esaminate finora fanno riferimento alle modalità più elementari
 della gestione dei segnali; non si sono pertanto ancora prese in
@@ -1583,10 +1585,9 @@ relative azioni conseguenti (\texttt{\small 6-11}).
 Questo è il tipico esempio di caso, già citato in
 sez.~\ref{sec:proc_race_cond}, in cui si genera una \itindex{race~condition}
 \textit{race condition}; infatti, in una situazione in cui un segnale è già
-arrivato (e \var{flag} è già ad 1) se un altro segnale segnale arriva
-immediatamente dopo l'esecuzione del controllo (\texttt{\small 6}) ma prima
-della cancellazione del flag (\texttt{\small 7}), la sua occorrenza sarà
-perduta.
+arrivato (e \var{flag} è già ad 1) se un altro segnale arriva immediatamente
+dopo l'esecuzione del controllo (\texttt{\small 6}) ma prima della
+cancellazione del flag (\texttt{\small 7}), la sua occorrenza sarà perduta.
 
 Questi esempi ci mostrano che per una gestione effettiva dei segnali occorrono
 delle funzioni più sofisticate di quelle finora illustrate, queste hanno la
@@ -1686,10 +1687,10 @@ da un processo. Il suo prototipo 
   \bodydesc{La funzione restituisce zero in caso di successo e $-1$ per un
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\errcode{EINVAL}] Si è specificato un numero di segnale invalido o si è
+  \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido o si è
     cercato di installare il gestore per \const{SIGKILL} o
     \const{SIGSTOP}.
-  \item[\errcode{EFAULT}] Si sono specificati indirizzi non validi.
+  \item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
   \end{errlist}}
 \end{prototype}
 
@@ -1939,8 +1940,8 @@ pi
   \bodydesc{La funzione restituisce zero in caso di successo e $-1$ per un
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\errcode{EINVAL}] Si è specificato un numero di segnale invalido.
-  \item[\errcode{EFAULT}] Si sono specificati indirizzi non validi.
+  \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido.
+  \item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
   \end{errlist}}
 \end{prototype}
 
@@ -2002,8 +2003,8 @@ sospensione del processo lo standard POSIX ha previsto la funzione
   \bodydesc{La funzione restituisce zero in caso di successo e $-1$ per un
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\errcode{EINVAL}] Si è specificato un numero di segnale invalido.
-  \item[\errcode{EFAULT}] Si sono specificati indirizzi non validi.
+  \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido.
+  \item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
   \end{errlist}}
 \end{prototype}
 
@@ -2132,10 +2133,10 @@ Installa un nuovo stack per i segnali.
     errore, nel qual caso \var{errno} assumerà i valori:
 
   \begin{errlist}
-  \item[\errcode{ENOMEM}] La dimensione specificata per il nuovo stack è minore
+  \item[\errcode{ENOMEM}] la dimensione specificata per il nuovo stack è minore
   di \const{MINSIGSTKSZ}.
-  \item[\errcode{EPERM}] Uno degli indirizzi non è valido.
-  \item[\errcode{EFAULT}] Si è cercato di cambiare lo stack alternativo mentre
+  \item[\errcode{EPERM}] uno degli indirizzi non è valido.
+  \item[\errcode{EFAULT}] si è cercato di cambiare lo stack alternativo mentre
   questo è attivo (cioè il processo è in esecuzione su di esso).
   \item[\errcode{EINVAL}] \param{ss} non è nullo e \var{ss\_flags} contiene un
   valore diverso da zero che non è \const{SS\_DISABLE}.
@@ -2314,6 +2315,16 @@ accorgimenti visti in precedenza) il valore di questa variabile tutte le volte
 che si è rilevata una interruzione dovuta ad un segnale.
 
 
+\section{Funzionalità avanzate}
+\label{sec:sig_real_time}
+
+
+Tratteremo in questa ultima sezione alcune funzionalità avanzate relativa ai
+segnali ed in generale ai meccanismi di notifica, a partire dalla funzioni
+introdotte per la gestione dei cosiddetti ``\textsl{segnali real-time}'', alla
+gestione avanzata delle temporizzazioni e le nuove interfacce per la gestione
+di segnali ed eventi attraverso l'uso di filedescriptor.
+
 \subsection{I segnali real-time}
 \label{sec:sig_real_time}
 
@@ -2428,12 +2439,12 @@ funzione, \funcd{sigqueue}, il cui prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\errcode{EAGAIN}] La coda è esaurita, ci sono già \const{SIGQUEUE\_MAX}
-    segnali in attesa si consegna.
-  \item[\errcode{EPERM}] Non si hanno privilegi appropriati per inviare il
+  \item[\errcode{EAGAIN}] la coda è esaurita, ci sono già
+    \const{SIGQUEUE\_MAX} segnali in attesa si consegna.
+  \item[\errcode{EPERM}] non si hanno privilegi appropriati per inviare il
     segnale al processo specificato.
-  \item[\errcode{ESRCH}] Il processo \param{pid} non esiste.
-  \item[\errcode{EINVAL}] Si è specificato un valore non valido per
+  \item[\errcode{ESRCH}] il processo \param{pid} non esiste.
+  \item[\errcode{EINVAL}] si è specificato un valore non valido per
     \param{signo}.
   \end{errlist}
   ed inoltre \errval{ENOMEM}.}
@@ -2473,8 +2484,8 @@ meccanismi di comunicazione elementare; la prima di queste funzioni 
   \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\errcode{EINTR}] La funzione è stata interrotta.
-  \item[\errcode{EINVAL}] Si è specificato un valore non valido per
+  \item[\errcode{EINTR}] la funzione è stata interrotta.
+  \item[\errcode{EINVAL}] si è specificato un valore non valido per
     \param{set}.
   \end{errlist}
   ed inoltre \errval{EFAULT}.}
@@ -2519,7 +2530,7 @@ relativi prototipi sono:
     errore, nel qual caso \var{errno} assumerà uno dei valori già visti per
     \func{sigwait}, ai quali si aggiunge, per \func{sigtimedwait}:
   \begin{errlist}
-  \item[\errcode{EAGAIN}] Si è superato il timeout senza che un segnale atteso
+  \item[\errcode{EAGAIN}] si è superato il timeout senza che un segnale atteso
     fosse emesso.
   \end{errlist}
 }
@@ -2550,6 +2561,24 @@ questa maniera devono essere mascherati per tutti i thread, compreso quello
 dedicato alla gestione, che potrebbe riceverlo fra due chiamate successive.
 
 
+\subsection{La gestione avanzata delle temporizzazioni}
+\label{sec:sig_timer_adv}
+
+% TODO trattare i Posix timer, e le fuzioni:
+% clock_getres clock_gettime clock_settime (vedi man page)
+% timer_getoverrun, timer_gettime, timer_settime, timer_create, timer_delete
+
+
+\subsection{Le interfacce per la notifica attraverso i file descriptor}
+\label{sec:sig_signalfd_eventfd}
+
+
+% TODO trattare qui eventfd signalfd e timerfd introdotte con il 2.6.22
+% vedi: http://lwn.net/Articles/233462/
+%       http://lwn.net/Articles/245533/
+
+
+
 
 
 % LocalWords:  kernel POSIX timer shell control ctrl kill raise signal handler