X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=signal.tex;h=f53e50b04d572b4bba0022ca38ede2e5da24dccf;hp=1ab3bd6aa8b1d9d510f83eecbc1fd3c7430cf7b2;hb=bf78d63598adf72d71aeea3c32277dd63484bb02;hpb=81ff87c3e2a6ecd3e33867798cba0d27576f44d0 diff --git a/signal.tex b/signal.tex index 1ab3bd6..f53e50b 100644 --- a/signal.tex +++ b/signal.tex @@ -1122,7 +1122,7 @@ illustrati in precedenza usare; i possibili valori sono riportati in Il valore della struttura specificata \param{value} viene usato per settare il timer, se il puntatore \param{ovalue} non è nullo il precedente valore viene salvato qui. I valori dei timer devono essere indicati attraverso una -struttura \var{itimerval}, definita in \figref{fig:file_stat_struct}. +struttura \type{itimerval}, definita in \figref{fig:file_stat_struct}. La struttura è composta da due membri, il primo, \var{it\_interval} definisce il periodo del timer; il secondo, \var{it\_value} il tempo mancante alla @@ -1146,7 +1146,7 @@ struct itimerval \end{lstlisting} \end{minipage} \normalsize - \caption{La struttura \var{itimerval}, che definisce i valori dei timer di + \caption{La struttura \type{itimerval}, che definisce i valori dei timer di sistema.} \label{fig:sig_itimerval} \end{figure} @@ -1854,19 +1854,20 @@ in \tabref{tab:sig_sa_flag}. \end{table} Come si può notare in \figref{fig:sig_sigaction} \func{sigaction} -permette\footnote{La possibilità è prevista dallo standard POSIX.1b, ma in - Linux è stata aggiunta a partire dai kernel della serie 2.2.x. In precedenza - era possibile ottenere alcune informazioni addizionali usando - \var{sa\_handler} con un secondo parametro addizionale di tipo \var{struct - sigcontext}, che adesso è deprecato.} di utilizzare due forme diverse di -manipolatore, da specificare, a seconda dell'uso o meno del flag -\macro{SA\_SIGINFO}, rispettivamente attraverso i campi \var{sa\_sigaction} o -\var{sa\_handler}, (che devono essere usati in maniera alternativa, in certe -implementazioni questi vengono addirittura definiti come \ctyp{union}): la -prima è quella classica usata anche con \func{signal}, la seconda permette -invece di usare un manipolatore in grado di ricevere informazioni più -dettagliate dal sistema, attraverso la struttura \var{siginfo\_t}, riportata -in \figref{fig:sig_siginfo_t}. +permette\footnote{La possibilità è prevista dallo standard POSIX.1b, ed è + stata aggiunta a partire dai kernel della serie 2.1.x con l'introduzione dei + segnali real-time (vedi \secref{sec:sig_real_time}). In precedenza era + possibile ottenere alcune informazioni addizionali usando \var{sa\_handler} + con un secondo parametro addizionale di tipo \var{struct sigcontext}, che + adesso è deprecato.} di utilizzare due forme diverse di manipolatore, da +specificare, a seconda dell'uso o meno del flag \macro{SA\_SIGINFO}, +rispettivamente attraverso i campi \var{sa\_sigaction} o \var{sa\_handler}, +(che devono essere usati in maniera alternativa, in certe implementazioni +questi vengono addirittura definiti come \ctyp{union}): la prima è quella +classica usata anche con \func{signal}, la seconda permette invece di usare un +manipolatore in grado di ricevere informazioni più dettagliate dal sistema, +attraverso la struttura \type{siginfo\_t}, riportata in +\figref{fig:sig_siginfo_t}. \begin{figure}[!htb] \footnotesize \centering @@ -1891,7 +1892,7 @@ siginfo_t { \end{lstlisting} \end{minipage} \normalsize - \caption{La struttura \var{siginfo\_t}.} + \caption{La struttura \type{siginfo\_t}.} \label{fig:sig_siginfo_t} \end{figure} @@ -2334,6 +2335,50 @@ parte l'uso di \type{sigjmp\_buf} per \param{env}, \func{longjmp}. + +\subsection{I segnali real-time} +\label{sec:sig_real_time} + + +Lo standard POSIX.1b, nel definire una serie di nuove interfacce per i servizi +real-time, ha introdotto una estensione del modello classico dei segnali che +presenta dei significativi miglioramenti,\footnote{questa estensione è stata + introdotta in Linux a partire dal kernel 2.1.43(?), e dalle \acr{glibc} + 2.1(?).} in particolare sono stati superati tre limiti fondamentali dei +segnali classici: +\begin{description} +\item[I segnali non sono accumulati] se più segnali vengono generati prima + dell'esecuzione di un manipolatore questo sarà eseguito una sola volta, ed + il processo non sarà in grado di accorgersi di quante volte l'evento che ha + generato il segnale è accaduto. +\item[I segnali non trasportano informazione] i segnali classici non prevedono + prevedono altra informazione sull'evento che li ha generati che il loro + numero. +\item[I segnali non hanno un ordine di consegna] l'ordine in cui diversi + segnali vengono consegnati è casuale e non prevedibile, e dipende dalla + situazione in cui si trova il kernel al momento. +\end{description} + +Le nuove caratteristiche aggiunte a quelli che vengono chiamati +\textsl{segnali real-time}, sono le seguenti: + +\begin{itemize*} +\item la creazione di una coda che permette di consegnare istanze multiple + dello stesso segnale qualora esso venga inviato più volte prima + dell'esecuzione del manipolatore. +\item l'introduzione di una priorità nella consegna dei segnali (segnali a + priorità più alta vengono consegnati prima). +\item la possibilità di restituire dei dati al manipolatore, attraverso l'uso + della struttura \type{siginfo\_t} e dei manipolatori di tipo + \var{sa_sigaction}. +\end{itemize*} + +Per non interferire con i segnali standard POSIX i nuovi segnali sono +definiti, in \file{signal.h} a partire da un valore minimo \macro{SIGRTMIN} +fino \macro{SIGRTMAX} ad un massimo di + + + %%% Local Variables: %%% mode: latex %%% TeX-master: "gapil"