X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=signal.tex;h=4f107af2f6d3a8013593c7d880a8495808c5c0a3;hp=53664b9956bafad9db256b201cf693c3c161dcdc;hb=2a44ed509cb94cf27315aaa8c0b496326b7b9cbd;hpb=c46df2fabf1fd8946892f9adf0771831a5c0f796 diff --git a/signal.tex b/signal.tex index 53664b9..4f107af 100644 --- a/signal.tex +++ b/signal.tex @@ -1,6 +1,6 @@ %% signal.tex %% -%% Copyright (C) 2000-2013 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", @@ -1781,13 +1781,13 @@ fig.~\ref{fig:sig_sleep_wrong}. Dato che è nostra intenzione utilizzare \signal{SIGALRM} il primo passo della nostra implementazione sarà quello di installare il relativo gestore salvando -il precedente (\texttt{\small 14-17}). Si effettuerà poi una chiamata ad +il precedente (\texttt{\small 14--17}). Si effettuerà poi una chiamata ad \func{alarm} per specificare il tempo d'attesa per l'invio del segnale a cui segue la chiamata a \func{pause} per fermare il programma (\texttt{\small - 18-20}) fino alla sua ricezione. Al ritorno di \func{pause}, causato dal -ritorno del gestore (\texttt{\small 1-9}), si ripristina il gestore originario -(\texttt{\small 21-22}) restituendo l'eventuale tempo rimanente -(\texttt{\small 23-24}) che potrà essere diverso da zero qualora + 18--20}) fino alla sua ricezione. Al ritorno di \func{pause}, causato dal +ritorno del gestore (\texttt{\small 1--9}), si ripristina il gestore originario +(\texttt{\small 21--22}) restituendo l'eventuale tempo rimanente +(\texttt{\small 23--24}) che potrà essere diverso da zero qualora l'interruzione di \func{pause} venisse causata da un altro segnale. Questo codice però, a parte il non gestire il caso in cui si è avuta una @@ -1816,11 +1816,11 @@ codice del tipo di quello riportato in fig.~\ref{fig:sig_sleep_incomplete}. \label{fig:sig_sleep_incomplete} \end{figure} -In questo caso il gestore (\texttt{\small 18-27}) non ritorna come in +In questo caso il gestore (\texttt{\small 18--27}) non ritorna come in fig.~\ref{fig:sig_sleep_wrong}, ma usa la funzione \func{longjmp} (\texttt{\small 25}) per rientrare direttamente nel corpo principale del programma. Dato che in questo caso il valore di uscita che verrà restituito da -\func{setjmp} è 1, grazie alla condizione impostata in (\texttt{\small 9-12}) +\func{setjmp} è 1, grazie alla condizione impostata in (\texttt{\small 9--12}) si potrà evitare comunque che \func{pause} sia chiamata a vuoto. Ma anche questa implementazione comporta dei problemi, in questo caso infatti @@ -1838,11 +1838,11 @@ da controllare nel corpo principale del programma, con un codice del tipo di quello riportato in fig.~\ref{fig:sig_event_wrong}. La logica del programma è quella di far impostare al gestore (\texttt{\small - 14-19}) una \index{variabili!globali} variabile globale, preventivamente + 14--19}) una \index{variabili!globali} variabile globale, preventivamente inizializzata nel programma principale, ad un diverso valore. In questo modo dal corpo principale del programma si potrà determinare, osservandone il contenuto di detta variabile, l'occorrenza o meno del segnale, ed eseguire le -azioni conseguenti (\texttt{\small 6-11}) relative. +azioni conseguenti (\texttt{\small 6--11}) relative. \begin{figure}[!htbp] \footnotesize\centering @@ -2212,7 +2212,7 @@ altre informazioni specifiche. \const{SI\_SIGIO} & Segnale di \signal{SIGIO} da una coda (vedi sez.~\ref{sec:file_asyncronous_operation}).\\ \const{SI\_TKILL} & Inviato da \func{tkill} o \func{tgkill} (vedi - sez.~\ref{cha:threads_xxx}), introdotto con il kernel + sez.~\ref{cha:thread_xxx}), introdotto con il kernel 2.4.19.\\ \hline \end{tabular} @@ -2508,14 +2508,14 @@ presenta neanche questa necessità. Per evitare i problemi di interferenza con gli altri segnali in questo caso non si è usato l'approccio di fig.~\ref{fig:sig_sleep_incomplete} evitando -l'uso di \func{longjmp}. Come in precedenza il gestore (\texttt{\small 27-30}) -non esegue nessuna operazione, limitandosi a ritornare per interrompere il -programma messo in attesa. +l'uso di \func{longjmp}. Come in precedenza il gestore (\texttt{\small + 27--30}) non esegue nessuna operazione, limitandosi a ritornare per +interrompere il programma messo in attesa. -La prima parte della funzione (\texttt{\small 6-10}) provvede ad installare +La prima parte della funzione (\texttt{\small 6--10}) provvede ad installare l'opportuno gestore per \signal{SIGALRM}, salvando quello originario, che sarà ripristinato alla conclusione della stessa (\texttt{\small 23}); il passo -successivo è quello di bloccare \signal{SIGALRM} (\texttt{\small 11-14}) per +successivo è quello di bloccare \signal{SIGALRM} (\texttt{\small 11--14}) per evitare che esso possa essere ricevuto dal processo fra l'esecuzione di \func{alarm} (\texttt{\small 16}) e la sospensione dello stesso. Nel fare questo si salva la maschera corrente dei segnali, che sarà ripristinata alla @@ -2669,15 +2669,15 @@ segnali che presenta dei significativi miglioramenti,\footnote{questa versione 2.1 della \acr{glibc}.} in particolare sono stati superati tre limiti fondamentali dei segnali classici: \begin{basedescript}{\desclabelwidth{1cm}\desclabelstyle{\nextlinelabel}} -\item[I segnali non sono accumulati] +\item[\textbf{I segnali non sono accumulati}] se più segnali vengono generati prima dell'esecuzione di un gestore 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] +\item[\textbf{I segnali non trasportano informazione}] i segnali classici non prevedono altra informazione sull'evento che li ha generati se non il fatto che sono stati emessi (tutta l'informazione che il kernel associa ad un segnale è il suo numero). -\item[I segnali non hanno un ordine di consegna] +\item[\textbf{I segnali non hanno un ordine di consegna}] l'ordine in cui diversi segnali vengono consegnati è casuale e non prevedibile. Non è possibile stabilire una priorità per cui la reazione a certi segnali ha la precedenza rispetto ad altri. @@ -3056,9 +3056,9 @@ tab.~\ref{tab:sig_timer_clockid_types}. \end{table} -% NOTE: dal 2.6.39 anche CLOCK_BOOTTIME_ALARM e CLOCK_BOOTTIME % NOTE: dal 3.0 anche i cosiddetti Posix Alarm Timers, con % CLOCK_REALTIME_ALARM vedi http://lwn.net/Articles/429925/ +% TODO: dal 3.10 anche CLOCK_TAI Per poter utilizzare queste funzionalità le \acr{glibc} richiedono che la macro \macro{\_POSIX\_C\_SOURCE} sia definita ad un valore maggiore o uguale