Risistemate le macro, nadato avanti coi segnali, aggiornato il makefile.
[gapil.git] / signal.tex
index 073a4cddfdb577411d76b20af3d7cd26cce64ba7..50e54a86e6ab60e0a75638884cf7dbc00c179304 100644 (file)
@@ -187,16 +187,16 @@ Ciascun segnale 
 diretto di questo numero da parte dei programmi è da evitare, in quanto esso
 può variare a seconda dell'implementazione del sistema.
 
 diretto di questo numero da parte dei programmi è da evitare, in quanto esso
 può variare a seconda dell'implementazione del sistema.
 
-Per questo ad ogni tipo di segnale viene associato un nome, che corrisponde
-tramite una macro di preprocessore, al suddetto numero, e sono questi nomi,
-che sono standardizzati e uniformi rispetto alle varie implementazioni, che si
+Per questo ad ogni tipo di segnale viene associato un nome, che corrisponde,
+tramite una macro di preprocessore, al suddetto numero. Sono questi nomi, che
+sono standardizzati e uniformi rispetto alle varie implementazioni, che si
 devono usare nei programmi. Tutti i nomi e le funzioni che concernono i
 segnali sono definiti nell'header di sistema \texttt{signal.h}.
 
 Il numero totale di segnali presenti è dato dalla macro \texttt{NSIG}, e dato
 che i numeri dei segnali sono allocati progressivamente, essa corrisponde
 devono usare nei programmi. Tutti i nomi e le funzioni che concernono i
 segnali sono definiti nell'header di sistema \texttt{signal.h}.
 
 Il numero totale di segnali presenti è dato dalla macro \texttt{NSIG}, e dato
 che i numeri dei segnali sono allocati progressivamente, essa corrisponde
-anche al successivo del valore numerico assegnato all'ultimo segnale definito,
-in \ntab\ si è riportato l'elenco completo dei segnali definiti in Linux
+anche al successivo del valore numerico assegnato all'ultimo segnale definito.
+In \ntab\ si è riportato l'elenco completo dei segnali definiti in Linux
 (estratto dalle man page), comparati con quelli definiti in vari standard.
 
 \begin{table}[htb]
 (estratto dalle man page), comparati con quelli definiti in vari standard.
 
 \begin{table}[htb]
@@ -249,8 +249,8 @@ in \ntab\ si 
   \caption{Lista dei segnali in Linux}
   \label{tab:sig_signal_list}
 \end{table}
   \caption{Lista dei segnali in Linux}
   \label{tab:sig_signal_list}
 \end{table}
-in \curtab\ si sono riportate anche le caratteristiche di ciascun segnale
-indicate nel campo azione con una lettera, la cui legenda è:
+in \curtab\ si sono riportate anche le caratteristiche di ciascun segnale,
+indicate con una lettera nel campo azione, la cui legenda è:
 \begin{table}[htb]
   \centering
   \begin{tabular}[c]{c p{6cm}}
 \begin{table}[htb]
   \centering
   \begin{tabular}[c]{c p{6cm}}
@@ -266,8 +266,9 @@ indicate nel campo azione con una lettera, la cui legenda 
     \tabref{tab:sig_signal_list}. }
   \label{tab:sig_action_leg}
 \end{table}
     \tabref{tab:sig_signal_list}. }
   \label{tab:sig_action_leg}
 \end{table}
-
-
+la descrizione dettagliata del significato dei vari segnali, raggruppati per
+tipologia, è a seguire; una descrizione dettagliata del significato delle
+varie azioni si trova invece in \secred{sec:sig_handlers}.
 
 
 \subsubsection{Segnali di errore di programma}
 
 
 \subsubsection{Segnali di errore di programma}
@@ -290,12 +291,12 @@ non ci fosse stato.
 
 L'azione di default per tutti questi segnali è causare la terminazione del
 processo che li ha causati. In genere oltre a questo il segnale provoca pure
 
 L'azione di default per tutti questi segnali è causare la terminazione del
 processo che li ha causati. In genere oltre a questo il segnale provoca pure
-la registrazione su disco di un \textit{core dump file} che viene scritto in
-un file \texttt{core} nella directory corrente del processo al momento
-dell'errore.
+la registrazione su disco di un file di \textit{core dump} che viene scritto
+in un file \texttt{core} nella directory corrente del processo al momento
+dell'errore, che il debugger può usare per ricostruire lo stato del programma
+al momento della terminazione.
 
 Questi segnali sono:
 
 Questi segnali sono:
-
 \begin{description}
 \item \texttt{SIGFPE} Riporta un errore aritmetico fatale. Benché il nome
   derivi da \textit{floating point exception} si applica a tutti gli errori
 \begin{description}
 \item \texttt{SIGFPE} Riporta un errore aritmetico fatale. Benché il nome
   derivi da \textit{floating point exception} si applica a tutti gli errori
@@ -316,7 +317,6 @@ Questi segnali sono:
   una variabile locale, andando a corrompere lo stack. Lo stesso segnale viene
   generato in caso di overflow dello stack o di problemi nell'esecuzione di di
   un signal handler.
   una variabile locale, andando a corrompere lo stack. Lo stesso segnale viene
   generato in caso di overflow dello stack o di problemi nell'esecuzione di di
   un signal handler.
-
 \item \texttt{SIGSEGV} Il nome deriva da \textit{segment violation}, e
   significa che il programma sta cercando di leggere o scrivere in una zona di
   memoria protetta al di fuori di quella che gli è stata riservata dal
 \item \texttt{SIGSEGV} Il nome deriva da \textit{segment violation}, e
   significa che il programma sta cercando di leggere o scrivere in una zona di
   memoria protetta al di fuori di quella che gli è stata riservata dal
@@ -325,14 +325,12 @@ Questi segnali sono:
 
   È tipico ottenere questo segnale dereferenziando un puntatore nullo o non
   inizializzato leggendo al di la della fine di un vettore. 
 
   È tipico ottenere questo segnale dereferenziando un puntatore nullo o non
   inizializzato leggendo al di la della fine di un vettore. 
-  
 \item \texttt{SIGBUS} In maniera analoga a \texttt{SIGSEGV} questo è un
   segnale che viene generato di solito quando si dereferenzia un puntatore non
   inzializzato, la differenza con con \texttt{SIGSEGV} è che questo indica un
   accesso non valido su un indirizzo esistente (tipo fuori dallo heap o dallo
   stack), mentre \texttt{SIGBUS} indica l'accesso ad un indirizzo non valido,
   come nel caso di un puntatore non allineato. 
 \item \texttt{SIGBUS} In maniera analoga a \texttt{SIGSEGV} questo è un
   segnale che viene generato di solito quando si dereferenzia un puntatore non
   inzializzato, la differenza con con \texttt{SIGSEGV} è che questo indica un
   accesso non valido su un indirizzo esistente (tipo fuori dallo heap o dallo
   stack), mentre \texttt{SIGBUS} indica l'accesso ad un indirizzo non valido,
   come nel caso di un puntatore non allineato. 
-
 \item \texttt{SIGABRT} Il segnale indica che il programma stesso ha rilevato
   un errore che viene riportato chiamando la funzione \texttt{abort} che
   genera questo segnale. 
 \item \texttt{SIGABRT} Il segnale indica che il programma stesso ha rilevato
   un errore che viene riportato chiamando la funzione \texttt{abort} che
   genera questo segnale. 
@@ -370,6 +368,11 @@ segnali sono:
 \subsection{I segnali di allarme}
 \label{sec:sig_alarm}
 
 \subsection{I segnali di allarme}
 \label{sec:sig_alarm}
 
+Questi segnali sono generati dalla scadenza di un temporizzatore. Il loro
+comportamento di default è quello di causare la terminazione del programma, ma
+nessun default ha una utlità avrebbe una utilità particolare, in quanto l'uso
+di questi segnali presuppone quasi sempre la necessità di un
+manipolatore. Questi segnali sono:
 \begin{description}
 \item  \texttt{SIGALRM}
 \item  \texttt{SIGVTALRM}
 \begin{description}
 \item  \texttt{SIGALRM}
 \item  \texttt{SIGVTALRM}
@@ -380,6 +383,11 @@ segnali sono:
 \subsection{I segnali di I/O asincrono}
 \label{sec:sig_asyncio}
 
 \subsection{I segnali di I/O asincrono}
 \label{sec:sig_asyncio}
 
+Questi segnali operano in congiunzione con le funzioni di I/O asincrono. Per
+questo occorre comunque usare \func{fcntl} per abilitare un file descriptor a
+generare questi segnali. 
+
+L'azione di default è di essere ignorati. Questi segnali sono:
 \begin{description}
 \item  \texttt{SIGIO}
 \item  \texttt{SIGURG}
 \begin{description}
 \item  \texttt{SIGIO}
 \item  \texttt{SIGURG}
@@ -389,7 +397,9 @@ segnali sono:
 \subsection{I segnali per il controllo di sessione}
 \label{sec:sig_job_control}
 
 \subsection{I segnali per il controllo di sessione}
 \label{sec:sig_job_control}
 
-
+Questi sono i segnali usati dal controllo di sessione, il loro uso è specifico
+per questo argomento e verrà trattato quando lo affronteremo. 
+Questi  segnali sono:
 \begin{description}
 \item  \texttt{SIGCHLD}
 \item  \texttt{SIGCONT}
 \begin{description}
 \item  \texttt{SIGCHLD}
 \item  \texttt{SIGCONT}
@@ -402,6 +412,13 @@ segnali sono:
 \subsection{I segnali di operazioni errate}
 \label{sec:sig_oper_error}
 
 \subsection{I segnali di operazioni errate}
 \label{sec:sig_oper_error}
 
+Questi segnali sono usati per riportare al programma errori generati da
+operazioni da lui eseguite; non indicano errori del programma quanto errori
+che impediscono il completamento dell'esecuzione dovute all'interazione con il
+resto del sistema.
+
+L'azione di default di questi segnali è di terminare il processo, questi
+segnali sono:
 \begin{description}
 \item  \texttt{SIGPIPE}
 \item  \texttt{SIGLOST}
 \begin{description}
 \item  \texttt{SIGPIPE}
 \item  \texttt{SIGLOST}
@@ -413,6 +430,8 @@ segnali sono:
 \subsection{Ulteriori segnali}
 \label{sec:sig_misc_sig}
 
 \subsection{Ulteriori segnali}
 \label{sec:sig_misc_sig}
 
+Raccogliamo qui infine usa serie di segnali che hanno scopi differenti non
+classificabili in maniera omogenea. Questi segnali sono:
 \begin{description}
 \item  \texttt{SIGUSR1} e \texttt{SIGUSR2}
 \item  \texttt{SIGWINCH}
 \begin{description}
 \item  \texttt{SIGUSR1} e \texttt{SIGUSR2}
 \item  \texttt{SIGWINCH}
@@ -420,3 +439,25 @@ segnali sono:
 \end{description}
 
 
 \end{description}
 
 
+
+\section{La gestione dei segnali}
+\label{sec:sig_handlers}
+
+I segnali sono il primo e più classico esempio di eventi asincroni, che
+possono accadere in un qualunque momento durante l'esecuzione di un programma.
+Non essendo sotto il controllo del programma la gestione dei segnali non potrà
+essere controllata all'interno del flusso di esecuzione di quest'ultimo, ma
+tutto quello che si potrà fare è di specificare (al kernel, che li genera)
+quale azione andrà intrapresa quando essi si verificano.
+
+In questa sezione vedremo allora come si gestiscono i segnali, partendo dalla
+descrizione di cosa fanno le azioni di default citate in precedenza, per poi
+esaminare le funzioni usate per personalizzare la gestione dei segnali,
+analizzando tutte le problematiche relative alla gestione di eventi asincroni
+di questo tipo.
+
+
+
+\subsection{Le azioni di default}
+\label{sec:sig_default_acttion}
+