X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=signal.tex;h=d287ef27543114eb670d6701942f2fb4e1a5d51c;hp=755f19c2cf6385d237fc22b0c3f7d2604f5213fe;hb=ff2d0141751ed62ef56e5bfd226c589311b8b669;hpb=46029a05c9009df38022e82b0f20732290388ef1 diff --git a/signal.tex b/signal.tex index 755f19c..d287ef2 100644 --- a/signal.tex +++ b/signal.tex @@ -143,7 +143,7 @@ moderno) il gestore una volta installato resta attivo e non si hanno tutti i problemi precedenti. In questa semantica i segnali vengono \textsl{generati} dal kernel per un processo all'occorrenza dell'evento che causa il segnale. In genere questo viene fatto dal kernel impostando l'apposito -campo della \var{task\_struct} del processo nella process table (si veda +campo della \struct{task\_struct} del processo nella process table (si veda \figref{fig:proc_task_struct}). Si dice che il segnale viene \textsl{consegnato} al processo (dall'inglese @@ -152,7 +152,7 @@ per tutto il tempo che passa fra la generazione del segnale e la sua consegna esso è detto \textsl{pendente} (o \textit{pending}). In genere questa procedura viene effettuata dallo scheduler\index{scheduler} quando, riprendendo l'esecuzione del processo in questione, verifica la presenza del -segnale nella \var{task\_struct} e mette in esecuzione il gestore. +segnale nella \struct{task\_struct} e mette in esecuzione il gestore. In questa semantica un processo ha la possibilità di bloccare la consegna dei segnali, in questo caso, se l'azione per il suddetto segnale non è quella di @@ -215,7 +215,7 @@ internamente o esternamente al processo. Come accennato quando un segnale viene generato, se la sua azione predefinita non è quella di essere ignorato, il kernel prende nota del fatto nella -\var{task\_struct} del processo; si dice così che il segnale diventa +\struct{task\_struct} del processo; si dice così che il segnale diventa \textsl{pendente} (o \textit{pending}), e rimane tale fino al momento in cui verrà notificato al processo (o verrà specificata come azione quella di ignorarlo). @@ -720,7 +720,7 @@ GNU, accessibile avendo definito \macro{\_GNU\_SOURCE}, ed funzione \func{strerror} (si veda \secref{sec:sys_strerror}) per gli errori: \begin{prototype}{string.h}{char *strsignal(int signum)} Ritorna il puntatore ad una stringa che contiene la descrizione del segnale - \var{signum}. + \param{signum}. \end{prototype} \noindent dato che la stringa è allocata staticamente non se ne deve modificare il contenuto, che resta valido solo fino alla successiva chiamata @@ -1134,14 +1134,14 @@ illustrati in precedenza usare; i possibili valori sono riportati in \label{tab:sig_setitimer_values} \end{table} -Il valore della struttura specificata \param{value} viene usato per impostare 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 \type{itimerval}, definita in \figref{fig:file_stat_struct}. +Il valore della struttura specificata \param{value} viene usato per impostare +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 \struct{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 -scadenza. Entrambi esprimono i tempi tramite una struttura \var{timeval} che +scadenza. Entrambi esprimono i tempi tramite una struttura \struct{timeval} che permette una precisione fino al microsecondo. Ciascun timer decrementa il valore di \var{it\_value} fino a zero, poi invia @@ -1161,8 +1161,8 @@ struct itimerval \end{lstlisting} \end{minipage} \normalsize - \caption{La struttura \type{itimerval}, che definisce i valori dei timer di - sistema.} + \caption{La struttura \structd{itimerval}, che definisce i valori dei timer + di sistema.} \label{fig:sig_itimerval} \end{figure} @@ -1348,7 +1348,7 @@ Lo standard richiede che la funzione sia implementata in maniera del tutto indipendente da \func{alarm}\footnote{nel caso di Linux questo è fatto utilizzando direttamente il timer del kernel.} e sia utilizzabile senza interferenze con l'uso di \const{SIGALRM}. La funzione prende come parametri -delle strutture di tipo \var{timespec}, la cui definizione è riportata in +delle strutture di tipo \struct{timespec}, la cui definizione è riportata in \figref{fig:sys_timeval_struct}, che permettono di specificare un tempo con una precisione (teorica) fino al nanosecondo. @@ -1775,10 +1775,10 @@ corrente viene restituito indietro. Questo permette (specificando \param{act} nullo e \param{oldact} non nullo) di superare uno dei limiti di \func{signal}, che non consente di ottenere l'azione corrente senza installarne una nuova. -Entrambi i puntatori fanno riferimento alla struttura \var{sigaction}, tramite -la quale si specificano tutte le caratteristiche dell'azione associata ad un -segnale. Anch'essa è descritta dallo standard POSIX.1 ed in Linux è definita -secondo quanto riportato in \figref{fig:sig_sigaction}. Il campo +Entrambi i puntatori fanno riferimento alla struttura \struct{sigaction}, +tramite la quale si specificano tutte le caratteristiche dell'azione associata +ad un segnale. Anch'essa è descritta dallo standard POSIX.1 ed in Linux è +definita secondo quanto riportato in \figref{fig:sig_sigaction}. Il campo \var{sa\_restorer}, non previsto dallo standard, è obsoleto e non deve essere più usato. @@ -1797,7 +1797,7 @@ struct sigaction \end{lstlisting} \end{minipage} \normalsize - \caption{La struttura \var{sigaction}.} + \caption{La struttura \structd{sigaction}.} \label{fig:sig_sigaction} \end{figure} @@ -1853,7 +1853,7 @@ in \tabref{tab:sig_sa_flag}. \secref{sec:sig_specific_features}).\\ \hline \end{tabular} - \caption{Valori del campo \var{sa\_flag} della struttura \var{sigaction}.} + \caption{Valori del campo \var{sa\_flag} della struttura \struct{sigaction}.} \label{tab:sig_sa_flag} \end{table} @@ -1862,7 +1862,7 @@ permette\footnote{La possibilit stata aggiunta nei 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 è + secondo parametro addizionale di tipo \var{sigcontext}, che adesso è deprecato.} di utilizzare due forme diverse di gestore, da specificare, a seconda dell'uso o meno del flag \const{SA\_SIGINFO}, rispettivamente attraverso i campi \var{sa\_sigaction} o \var{sa\_handler}, @@ -1870,7 +1870,7 @@ rispettivamente attraverso i campi \var{sa\_sigaction} o \var{sa\_handler}, questi vengono addirittura definiti come \ctyp{union}): la prima è quella classica usata anche con \func{signal}, la seconda permette invece di usare un gestore in grado di ricevere informazioni più dettagliate dal sistema, -attraverso la struttura \type{siginfo\_t}, riportata in +attraverso la struttura \struct{siginfo\_t}, riportata in \figref{fig:sig_siginfo_t}. \begin{figure}[!htb] @@ -1896,7 +1896,7 @@ siginfo_t { \end{lstlisting} \end{minipage} \normalsize - \caption{La struttura \type{siginfo\_t}.} + \caption{La struttura \structd{siginfo\_t}.} \label{fig:sig_siginfo_t} \end{figure} @@ -1935,9 +1935,9 @@ dati urgenti su un socket\index{socket}. Benché sia possibile usare nello stesso programma sia \func{sigaction} che \func{signal} occorre molta attenzione, in quanto le due funzioni possono interagire in maniera anomala. Infatti l'azione specificata con -\var{sigaction} contiene un maggior numero di informazioni rispetto al -semplice indirizzo del gestore restituito da \func{signal}. Per questo -motivo se si usa quest'ultima per installare un gestore sostituendone uno +\struct{sigaction} contiene un maggior numero di informazioni rispetto al +semplice indirizzo del gestore restituito da \func{signal}. Per questo motivo +se si usa quest'ultima per installare un gestore sostituendone uno precedentemente installato con \func{sigaction}, non sarà possibile effettuare un ripristino corretto dello stesso. @@ -2009,12 +2009,12 @@ permettono si bloccare temporaneamente (o di eliminare completamente, impostando \const{SIG\_IGN} come azione) la consegna dei segnali ad un processo. Questo è fatto specificando la cosiddetta \textsl{maschera dei segnali} (o \textit{signal mask}) del processo\footnote{nel caso di Linux - essa è mantenuta dal campo \var{blocked} della \var{task\_struct} del + essa è mantenuta dal campo \var{blocked} della \struct{task\_struct} del processo.} cioè l'insieme dei segnali la cui consegna è bloccata. Abbiamo accennato in \secref{sec:proc_fork} che la \textit{signal mask} viene ereditata dal padre alla creazione di un processo figlio, e abbiamo visto al paragrafo precedente che essa può essere modificata, durante l'esecuzione di -un gestore, attraverso l'uso dal campo \var{sa\_mask} di \var{sigaction}. +un gestore, attraverso l'uso dal campo \var{sa\_mask} di \struct{sigaction}. Uno dei problemi evidenziatisi con l'esempio di \secref{fig:sig_event_wrong} è che in molti casi è necessario proteggere delle sezioni di codice (nel caso in @@ -2279,11 +2279,11 @@ typedef struct { \end{lstlisting} \end{minipage} \normalsize - \caption{La struttura \var{stack\_t}.} + \caption{La struttura \structd{stack\_t}.} \label{fig:sig_stack_t} \end{figure} -Il campo \var{ss\_sp} di \var{stack\_t} indica l'indirizzo base dello stack, +Il campo \var{ss\_sp} di \struct{stack\_t} indica l'indirizzo base dello stack, mentre \var{ss\_size} ne indica la dimensione; il campo \var{ss\_flags} invece indica lo stato dello stack. Nell'indicare un nuovo stack occorre inizializzare \var{ss\_sp} e \var{ss\_size} rispettivamente al puntatore e @@ -2400,7 +2400,7 @@ vengono chiamati \textsl{segnali real-time}, in particolare: con un numero minore, che pertanto hanno una priorità maggiore. \item è stata introdotta la possibilità di restituire dei dati al gestore, attraverso l'uso di un campo apposito nella struttura - \type{siginfo\_t} accessibile tramite gestori di tipo + \struct{siginfo\_t} accessibile tramite gestori di tipo \var{sa\_sigaction}. \end{itemize*} @@ -2423,9 +2423,9 @@ real-time. Si tenga presente che questi nuovi segnali non sono associati a nessun evento sepcifico (a meno di non utilizzarli, come vedremo in \secref{sec:file_asyncronous_io}, per l'I/O asincrono) e devono essere inviati -esplicitamente. Tutti i segnali real-time restituiscono al gestore, oltre -ai campi \var{si\_pid} e \var{si\_uid} di \type{siginfo\_t} una struttura -\type{sigval} (riportata in \figref{fig:sig_sigval}) in cui può essere +esplicitamente. Tutti i segnali real-time restituiscono al gestore, oltre ai +campi \var{si\_pid} e \var{si\_uid} di \struct{siginfo\_t} una struttura +\struct{sigval} (riportata in \figref{fig:sig_sigval}) in cui può essere restituito al processo un valore o un indirizzo, che costituisce il meccanismo con cui il segnale è in grado di inviare una ulteriore informazione al processo. @@ -2441,15 +2441,15 @@ union sigval { \end{lstlisting} \end{minipage} \normalsize - \caption{La struttura \type{sigval}, usata dai segnali real time per + \caption{La struttura \structd{sigval}, usata dai segnali real time per restituire dati al gestore.} \label{fig:sig_sigval} \end{figure} A causa di queste loro caratteristiche, la funzione \func{kill} non è adatta ad inviare un segnale real time, in quanto non è in grado di fornire alcun -valore per \var{sigval}; per questo motivo lo standard ha previsto una nuova -funzione, \func{sigqueue}, il cui prototipo è: +valore per \struct{sigval}; per questo motivo lo standard ha previsto una +nuova funzione, \func{sigqueue}, il cui prototipo è: \begin{prototype}{signal.h} {int sigqueue(pid\_t pid, int signo, const union sigval value)} @@ -2476,17 +2476,17 @@ stessi; un valore nullo di \func{signo} permette di verificare le condizioni di errore senza inviare nessun segnale. Se il segnale è bloccato la funzione ritorna immediatamente, se si è -installato un gestore con \const{SA\_SIGINFO} e ci sono risorse -disponibili, vale a dire che c'è posto nella coda\footnote{la profondità della - coda è indicata dalla costante \const{SIGQUEUE\_MAX}, una della tante - costanti di sistema definite dallo standard POSIX, che non abbiamo riportato +installato un gestore con \const{SA\_SIGINFO} e ci sono risorse disponibili, +vale a dire che c'è posto nella coda\footnote{la profondità della coda è + indicata dalla costante \const{SIGQUEUE\_MAX}, una della tante costanti di + sistema definite dallo standard POSIX, che non abbiamo riportato esplicitamente in \secref{sec:sys_limits}. Il suo valore minimo secondo lo standard, \const{\_POSIX\_SIGQUEUE\_MAX}, è pari a 32.}, esso viene inserito e diventa pendente; una volta consegnato riporterà nel campo \var{si\_code} di -\var{siginfo} il valore \const{SI\_QUEUE} e il campo \var{si\_value} riceverà -quanto inviato con \param{value}. Se invece si è installato un gestore -nella forma classica il segnale sarà generato, ma tutte le caratteristiche -tipiche dei segnali real-time (priorità e coda) saranno perse. +\struct{siginfo} il valore \const{SI\_QUEUE} e il campo \var{si\_value} +riceverà quanto inviato con \param{value}. Se invece si è installato un +gestore nella forma classica il segnale sarà generato, ma tutte le +caratteristiche tipiche dei segnali real-time (priorità e coda) saranno perse. Lo standard POSIX.1b definisce inoltre delle nuove funzioni che permettono di gestire l'attesa di segnali specifici su una coda, esse servono in particolar