X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=signal.tex;h=6901b69bf0a5c8b70878d9a12226f1c371128768;hb=18c3e3a08f28307809f1846bd6063442d2bc4d3e;hp=669936ec4507df9e1595633d5fd668e451f8212d;hpb=886e1105f5b014b7984a8416d6a8101259af16d6;p=gapil.git diff --git a/signal.tex b/signal.tex index 669936e..6901b69 100644 --- a/signal.tex +++ b/signal.tex @@ -390,7 +390,7 @@ momento della ricezione del segnale. \const{SIGTRAP} &SL & C & Trappole per un Trace/breakpoint. \\ \const{SIGURG} &SLB& B & Ricezione di una \textit{urgent condition} su un socket. \\ - \const{SIGVTALRM}&SLB& A & Virtual alarm clock. \\ + \const{SIGVTALRM}&SLB& A & Timer di esecuzione scaduto. \\ \const{SIGXCPU} &SLB& C & Ecceduto il limite sul tempo di CPU. \\ \const{SIGXFSZ} &SLB& C & Ecceduto il limite sulla dimensione dei file. \\ \const{SIGIOT} &L & C & IOT trap. Sinonimo di \const{SIGABRT}. \\ @@ -563,16 +563,17 @@ segnali sono: \subsection{I segnali di allarme} \label{sec:sig_alarm} -Questi segnali sono generati dalla scadenza di un timer. Il loro comportamento -predefinito è quello di causare la terminazione del programma, ma con questi -segnali la scelta predefinita è irrilevante, in quanto il loro uso presuppone -sempre la necessità di un gestore. Questi segnali sono: +Questi segnali sono generati dalla scadenza di un timer (vedi +sez.~\ref{sec:sig_alarm_abort}). Il loro comportamento predefinito è quello di +causare la terminazione del programma, ma con questi segnali la scelta +predefinita è irrilevante, in quanto il loro uso presuppone sempre la +necessità di un gestore. Questi segnali sono: \begin{basedescript}{\desclabelwidth{2.0cm}} \item[\const{SIGALRM}] Il nome sta per \textit{alarm}. Segnale la scadenza di un timer misurato sul tempo reale o sull'orologio di sistema. È normalmente usato dalla funzione \func{alarm}. -\item[\const{SIGVTALRM}] Il nome sta per \textit{virtual alarm}. È analogo al +\item[\const{SIVGTALRM}] Il nome sta per \textit{virtual alarm}. È analogo al precedente ma segnala la scadenza di un timer sul tempo di CPU usato dal processo. @@ -1215,6 +1216,8 @@ significa circa 10~ms). Il sistema assicura comunque che il segnale non sar mai generato prima della scadenza programmata (l'arrotondamento cioè è sempre effettuato per eccesso). +% TODO: verificare cose è successo con l'introduzione nel kernel degli htrimer + Una seconda causa di potenziali ritardi è che il segnale viene generato alla scadenza del timer, ma poi deve essere consegnato al processo; se quest'ultimo è attivo (questo è sempre vero per \const{ITIMER\_VIRT}) la consegna è @@ -1227,7 +1230,6 @@ in cui un timer scade prima che il segnale di una precedente scadenza sia stato consegnato; in questo caso, per il comportamento dei segnali descritto in sez.~\ref{sec:sig_sigchld}, un solo segnale sarà consegnato. - Dato che sia \func{alarm} che \func{setitimer} non consentono di leggere il valore corrente di un timer senza modificarlo, è possibile usare la funzione \funcd{getitimer}, il cui prototipo è: @@ -1583,10 +1585,9 @@ relative azioni conseguenti (\texttt{\small 6-11}). Questo è il tipico esempio di caso, già citato in sez.~\ref{sec:proc_race_cond}, in cui si genera una \itindex{race~condition} \textit{race condition}; infatti, in una situazione in cui un segnale è già -arrivato (e \var{flag} è già ad 1) se un altro segnale segnale arriva -immediatamente dopo l'esecuzione del controllo (\texttt{\small 6}) ma prima -della cancellazione del flag (\texttt{\small 7}), la sua occorrenza sarà -perduta. +arrivato (e \var{flag} è già ad 1) se un altro segnale arriva immediatamente +dopo l'esecuzione del controllo (\texttt{\small 6}) ma prima della +cancellazione del flag (\texttt{\small 7}), la sua occorrenza sarà perduta. Questi esempi ci mostrano che per una gestione effettiva dei segnali occorrono delle funzioni più sofisticate di quelle finora illustrate, queste hanno la @@ -2563,16 +2564,22 @@ dedicato alla gestione, che potrebbe riceverlo fra due chiamate successive. \subsection{La gestione avanzata delle temporizzazioni} \label{sec:sig_timer_adv} - +% TODO trattare i Posix timer, e le fuzioni: +% clock_getres clock_gettime clock_settime (vedi man page) +% timer_getoverrun, timer_gettime, timer_settime, timer_create, timer_delete \subsection{Le interfacce per la notifica attraverso i file descriptor} \label{sec:sig_signalfd_eventfd} -% TODO trattare qui eventfd signalfd e timerfd introdotte con il 2.6.22 +% TODO trattare qui eventfd signalfd e timerfd introdotte con il 2.6.22 +% timerfd è stata tolta nel 2.6.23 e rifatta per bene nel 2.6.25 % vedi: http://lwn.net/Articles/233462/ % http://lwn.net/Articles/245533/ +% http://lwn.net/Articles/267331/ + + % LocalWords: kernel POSIX timer shell control ctrl kill raise signal handler