Un po' di spiegazioni in piu`
authorSimone Piccardi <piccardi@gnulinux.it>
Wed, 17 Apr 2002 22:10:33 +0000 (22:10 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Wed, 17 Apr 2002 22:10:33 +0000 (22:10 +0000)
signal.tex

index 3ad72097f971bb9f03e7e7fea5e3240556ce13a2..4055c7a4f8e60d3c0f60134f71b1802c9218cad1 100644 (file)
@@ -351,18 +351,19 @@ stato dello stack e delle variabili al momento della ricezione del segnale.
   \centering
   \begin{tabular}[c]{|l|c|c|p{8cm}|}
     \hline
-    \textbf{Segnale}&\textbf{Standard}&\textbf{Azione}&\textbf{Descrizione} \\
+    \textbf{Segnale} &\textbf{Standard}&\textbf{Azione}&\textbf{Descrizione} \\
     \hline
     \hline
-    \macro{SIGHUP}   &PL & A &Hangup o terminazione del processo di controllo\\
-    \macro{SIGINT}   &PL & A & Interrupt da tastiera (\cmd{C-c})            \\
-    \macro{SIGQUIT}  &PL & C & Quit da tastiera (\cmd{C-y})                 \\
-    \macro{SIGILL}   &PL & C & Istruzione illegale                          \\
-    \macro{SIGABRT}  &PL & C & Segnale di abort da \func{abort}             \\
-    \macro{SIGFPE}   &PL & C & Errore aritmetico                            \\
-    \macro{SIGKILL}  &PL &AEF& Segnale di terminazione forzata              \\
-    \macro{SIGSEGV}  &PL & C & Errore di accesso in memoria                 \\
-    \macro{SIGPIPE}  &PL & A & Pipe spezzata                                \\
+    \macro{SIGHUP}   &PL & A & Hangup o terminazione del processo di 
+                               controllo                                     \\
+    \macro{SIGINT}   &PL & A & Interrupt da tastiera (\cmd{C-c})             \\
+    \macro{SIGQUIT}  &PL & C & Quit da tastiera (\cmd{C-y})                  \\
+    \macro{SIGILL}   &PL & C & Istruzione illegale                           \\
+    \macro{SIGABRT}  &PL & C & Segnale di abort da \func{abort}              \\
+    \macro{SIGFPE}   &PL & C & Errore aritmetico                             \\
+    \macro{SIGKILL}  &PL &AEF& Segnale di terminazione forzata               \\
+    \macro{SIGSEGV}  &PL & C & Errore di accesso in memoria                  \\
+    \macro{SIGPIPE}  &PL & A & Pipe spezzata                                 \\
     \macro{SIGALRM}  &PL & A & Segnale del timer da \func{alarm}             \\
     \macro{SIGTERM}  &PL & A & Segnale di terminazione \verb|C-\|            \\
     \macro{SIGUSR1}  &PL & A & Segnale utente numero 1                       \\
@@ -394,7 +395,8 @@ stato dello stack e delle variabili al momento della ricezione del segnale.
     \macro{SIGINFO}  &L  &   & Sinonimo di \macro{SIGPWR}                    \\
     \macro{SIGLOST}  &L  & A & Perso un lock sul file (per NFS)              \\
     \macro{SIGWINCH} &LB & B & Finestra ridimensionata (4.3 BSD, Sun)        \\
-    \macro{SIGUNUSED}&L  & A &Segnale inutilizzato (diventerà \macro{SIGSYS})\\
+    \macro{SIGUNUSED}&L  & A & Segnale inutilizzato (diventerà 
+                               \macro{SIGSYS})                               \\
     \hline
   \end{tabular}
   \caption{Lista dei segnali in Linux.}
@@ -1811,7 +1813,14 @@ dettagli si consulti la man page di \func{sigaction}).
 Il campo \var{sa\_mask} serve ad indicare l'insieme dei segnali che devono
 essere bloccati durante l'esecuzione del manipolatore, ad essi viene comunque
 sempre aggiunto il segnale che ne ha causato la chiamata, a meno che non si
-sia specificato con \var{sa\_flag} un comportamento diverso.
+sia specificato con \var{sa\_flag} un comportamento diverso. 
+
+L'uso di questo campo permette ad esempio di risolvere il problema residuo
+dell'implementazione di \code{sleep} mostrata in
+\secref{fig:sig_sleep_incomplete}: in quel caso infatti se il segnale di
+allarme interrompe un altro manipolatore questo non sarà eseguito
+correttamente, la cosa può essere prevenuta installando quest'ultimo usando
+\var{sa\_mask} per bloccare \macro{SIGALRM} durante la sua esecuzione.
 
 Il valore di \var{sa\_flag} permette di specificare vari aspetti del
 comportamento di \func{sigaction}, e della reazione del processo ai vari
@@ -1942,12 +1951,19 @@ quell'indirizzo.
   \label{tab:sig_procmask_how}
 \end{table}
 
-Un altro 
+In questo modo diventa possibile proteggere delle sezioni di codice bloccando
+l'insieme di segnali voluto per poi riabilitarli alla fine della sezione
+critica. La funzione permette di risolvere problemi come quelli mostrati in
+\secref{fig:sig_event_wrong}, proteggendo la sezione fra il controllo del flag
+e la sua cancellazione. 
+
+Un altro problema che abbiamo visto presentarsi con l'uso di \func{pause} è
+quello relativo 
 
 \begin{prototype}{signal.h}
 {int sigsuspend(const sigset\_t *mask)} 
   
-  Cambia la \textit{signal mask} del processo corrente.
+  Setta la \textit{signal mask} specificata, mettendo in attesa il processo.
   
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
     errore, nel qual caso \var{errno} assumerà i valori:
@@ -1962,14 +1978,6 @@ Un altro
 
 
 
-
-\subsection{Funzioni rientranti e default dei segnali}
-\label{sec:sig_reentrant}
-
-
-
-
-
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"