X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=signal.tex;h=ec5b39d10af30c9c6af6c34c0faad94947d6dfa4;hb=01f1457fa08fbadba9736d26996f3b7798788952;hp=53664b9956bafad9db256b201cf693c3c161dcdc;hpb=c46df2fabf1fd8946892f9adf0771831a5c0f796;p=gapil.git diff --git a/signal.tex b/signal.tex index 53664b9..ec5b39d 100644 --- a/signal.tex +++ b/signal.tex @@ -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 @@ -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