Nella semantica \textit{unreliable} la routine di gestione del segnale
specificata dall'utente non resta installata una volta chiamata; è perciò a
carico dell'utente stesso ripetere l'installazione all'interno della routine
-stessa in tutti i casi in cui si vuole che il signal handler esterno resti
-attivo.
-
-Per questo motivo è possibile una race-condition in cui il segnale arriva
-prima che il suo manipolatore sia installato, nel qual caso il segnale può
-essere perso o causare il comportamento originale (in genere la terminazione
-del processo). Questa è la ragione per cui detti segnali sono chiamati
-\textit{inaffidabili}, in quanto la ricezione del segnale e la reinstallazione
-del suo manipolatore non sono operazioni atomiche.
-
-In caso di implementazione inaffidabile le chiamate di sistema non sono fatte
-ripartire automaticamente quando sono interrotte da un segnale, per questo il
-programma deve controllare lo stato di uscita della chiamata al sistema e
-riperterla nel caso l'errore riportato da \texttt{errno} sia \texttt{EINTR}.
+di gestione stessa in tutti i casi in cui si vuole che il signal handler
+esterno resti attivo.
+
+Per questo motivo è possibile una race-condition in cui un secondo segnale
+arriva prima che il manipolatore abbia eseguito la re-installazione di se
+stesso, nel qual caso il segnale può essere perso o causare il comportamento
+originale assegnato al segnale (in genere la terminazione del processo).
+Questa è la ragione per cui detti segnali sono chiamati \textit{inaffidabili},
+in quanto la ricezione del segnale e la reinstallazione del suo manipolatore
+non sono operazioni atomiche.
+
+Nel caso di implementazione inaffidabile le chiamate di sistema non
+sono fatte ripartire automaticamente quando sono interrotte da un segnale, per
+questo il programma deve controllare lo stato di uscita della chiamata al
+sistema e riperterla nel caso l'errore riportato da \texttt{errno} sia
+\texttt{EINTR}.
Inoltre in questo caso non esiste una modalità semplice per ottenere una
operazione di pausa atomica (cioè mandare in sleep un processo fino all'arrivo
\subsubsection{Tipi di segnali}
\label{sec:sig_types}
-
In generale gli eventi che generano i segnali si possono dividere in tre
categorie principali: errori, eventi e richieste esplicite.
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.
+anche al successivo del valore numerico assegnato all'ultimo segnale definito,
+in \ntab\ si è riportato l'elenco completo dei segnali definiti in Linux,
+comparati con quelli definiti in vari standard.
+
+\begin{table}[htb]
+ \centering
+ \begin{tabular}[c]{|l|c|c|c||c|l|}
+ \hline
+ Segnale & POSIX.1 & SUSv2 & Linux &Azione & Descrizione \\
+ \hline
+ \hline
+ SIGHUP &$\bullet$&&$\bullet$& A & Hangup \\
+ SIGINT &$\bullet$&&$\bullet$& A & Interrupt from keyboard \\
+ SIGQUIT &$\bullet$&&$\bullet$& C & Quit from keyboard \\
+ SIGILL &$\bullet$&&$\bullet$& C & Illegal Instruction \\
+ SIGABRT &$\bullet$&&$\bullet$& C & Abort signal from abort(3) \\
+ SIGFPE &$\bullet$&&$\bullet$& C & Floating point exception \\
+ SIGKILL &$\bullet$&&$\bullet$& AEF & Kill signal \\
+ SIGSEGV &$\bullet$&&$\bullet$& C & Invalid memory reference \\
+ SIGPIPE &$\bullet$&&$\bullet$& A & Broken pipe \\
+ SIGALRM &$\bullet$&&$\bullet$& A & Timer signal from alarm(2) \\
+ SIGTERM &$\bullet$&&$\bullet$& A & Termination signal \\
+ SIGUSR1 &$\bullet$&&$\bullet$& A & User-defined signal 1 \\
+ SIGUSR2 &$\bullet$&&$\bullet$& A & User-defined signal 2 \\
+ SIGCHLD &$\bullet$&&$\bullet$& B & Child stopped or terminated \\
+ SIGCONT &$\bullet$&&$\bullet$& & Continue if stopped \\
+ SIGSTOP &$\bullet$&&$\bullet$& DEF & Stop process \\
+ SIGTSTP &$\bullet$&&$\bullet$& D & Stop typed at tty \\
+ SIGTTIN &$\bullet$&&$\bullet$& D & tty input for background process \\
+ SIGTTOU &$\bullet$&&$\bullet$& D & tty output for background process \\
+ SIGBUS &&$\bullet$&$\bullet$& C & Bus error (bad memory access) \\
+ SIGPOLL &&$\bullet$&$\bullet$& A & Pollable event (Sys V). Synonym of SIGIO\\
+ SIGPROF &&$\bullet$&$\bullet$& A & Profiling timer expired \\
+ SIGSYS &&$\bullet$&$\bullet$& C & Bad argument to routine (SVID) \\
+ SIGTRAP &&$\bullet$&$\bullet$& C & Trace/breakpoint trap \\
+ SIGURG &&$\bullet$&$\bullet$& B & Urgent condition on socket (4.2 BSD) \\
+ SIGVTALRM &&$\bullet$&$\bullet$& A & Virtual alarm clock (4.2 BSD) \\
+ SIGXCPU &&$\bullet$&$\bullet$& C & CPU time limit exceeded (4.2 BSD) \\
+ SIGXFSZ &&$\bullet$&$\bullet$& C & File size limit exceeded (4.2 BSD) \\
+ SIGIOT &&&$\bullet$& C & IOT trap. A synonym for SIGABRT \\
+ SIGEMT &&&$\bullet$& & \\
+ SIGSTKFLT &&&$\bullet$& A & Stack fault on coprocessor \\
+ SIGIO &&&$\bullet$& A & I/O now possible (4.2 BSD) \\
+ SIGCLD &&&$\bullet$& & A synonym for SIGCHLD \\
+ SIGPWR &&&$\bullet$& A & Power failure (System V) \\
+ SIGINFO &&&$\bullet$& & A synonym for SIGPWR \\
+ SIGLOST &&&$\bullet$& A & File lock lost \\
+ SIGWINCH &&&$\bullet$& B & Window resize signal (4.3 BSD, Sun) \\
+ SIGUNUSED &&&$\bullet$& A & Unused signal (will be SIGSYS) \\
+ \hline
+ \end{tabular}
+ \caption{Lista dei segnali in Linux}
+ \label{tab:sign_signal_list}
+\end{table}
\subsubsection{Segnali di errore di programma}
\begin{itemize}
\item \texttt{SIGFPE} Riporta un errore aritmetico fatale. Benché il nome
derivi da \textit{floating point exception} si applica a tutti gli errori
- aritmetici compresa la divisione per zero e l'overflow.
+ aritmetici compresa la divisione per zero e l'overflow.
% Per questo segnale le cose sono complicate dal fatto che possono esserci
% molte diverse eccezioni che \texttt{SIGFPE} non distingue, mentre lo