\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}. \\
\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.
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 è
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 è:
\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}
% http://lwn.net/Articles/245533/
+
+
+
% LocalWords: kernel POSIX timer shell control ctrl kill raise signal handler
% LocalWords: reliable unreliable fig race condition sez struct process table
% LocalWords: delivered pending scheduler sigpending l'I suspend SIGKILL wait
Valore massimo del tipo di dato
\type{ssize\_t}.\\
\texttt{\_SC\_CLK\_TCK} & \const{CLK\_TCK} &
- Il numero di \textit{clock tick} al secondo,
+ Il numero di \itindex{clock~tick}
+ \textit{clock tick} al secondo,
cioè l'unità di misura del
\itindex{process~time} \textit{process
time} (vedi
le date di modifica dei file o quelle di avvio dei processi. Per memorizzare
questo tempo è stato riservato il tipo primitivo \type{time\_t}.
\item[\textit{process time}] \itindex{process~time} detto talvolta
- \textsl{tempo di processore}. Viene misurato in \textit{clock tick}. Un
- tempo questo corrispondeva al numero di interruzioni effettuate dal timer di
- sistema, adesso lo standard POSIX richiede che esso sia pari al valore della
- costante \const{CLOCKS\_PER\_SEC}, che deve essere definita come 1000000,
- qualunque sia la risoluzione reale dell'orologio di sistema e la frequenza
- delle interruzioni del timer.\footnote{quest'ultima, come accennato in
- sez.~\ref{sec:proc_hierarchy}, è invece data dalla costante \const{HZ}.}
- Il dato primitivo usato per questo tempo è \type{clock\_t}, che ha quindi
- una risoluzione del microsecondo. Il numero di tick al secondo può essere
- ricavato anche attraverso \func{sysconf} (vedi sez.~\ref{sec:sys_sysconf}).
- Il vecchio simbolo \const{CLK\_TCK} definito in \file{time.h} è ormai
- considerato obsoleto.
+ \textsl{tempo di processore}. Viene misurato in \itindex{clock~tick}
+ \textit{clock tick}. Un tempo questo corrispondeva al numero di interruzioni
+ effettuate dal timer di sistema, adesso lo standard POSIX richiede che esso
+ sia pari al valore della costante \const{CLOCKS\_PER\_SEC}, che deve essere
+ definita come 1000000, qualunque sia la risoluzione reale dell'orologio di
+ sistema e la frequenza delle interruzioni del timer.\footnote{quest'ultima,
+ come accennato in sez.~\ref{sec:proc_hierarchy}, è invece data dalla
+ costante \const{HZ}.} Il dato primitivo usato per questo tempo è
+ \type{clock\_t}, che ha quindi una risoluzione del microsecondo. Il numero
+ di \itindex{clock~tick} \textit{tick} al secondo può essere ricavato anche
+ attraverso \func{sysconf} (vedi sez.~\ref{sec:sys_sysconf}). Il vecchio
+ simbolo \const{CLK\_TCK} definito in \file{time.h} è ormai considerato
+ obsoleto.
\end{basedescript}
In genere si usa il \itindend{calendar~time} \textit{calendar time} per
caso di errore.}
\end{prototype}
-La funzione restituisce il tempo in tick, quindi se si vuole il tempo in
-secondi occorre dividere il risultato per la costante
-\const{CLOCKS\_PER\_SEC}.\footnote{le \acr{glibc} seguono lo standard ANSI C,
- POSIX richiede che \const{CLOCKS\_PER\_SEC} sia definito pari a 1000000
- indipendentemente dalla risoluzione del timer di sistema.} In genere
+La funzione restituisce il tempo in \itindex{clock~tick} \texttt{clock tick},
+quindi se si vuole il tempo in secondi occorre dividere il risultato per la
+costante \const{CLOCKS\_PER\_SEC}.\footnote{le \acr{glibc} seguono lo standard
+ ANSI C, POSIX richiede che \const{CLOCKS\_PER\_SEC} sia definito pari a
+ 1000000 indipendentemente dalla risoluzione del timer di sistema.} In genere
\type{clock\_t} viene rappresentato come intero a 32 bit, il che comporta un
valore massimo corrispondente a circa 72 minuti, dopo i quali il contatore
riprenderà lo stesso valore iniziale.
\begin{prototype}{sys/times.h}{clock\_t times(struct tms *buf)}
Legge in \param{buf} il valore corrente dei tempi di processore.
- \bodydesc{La funzione ritorna il numero di clock tick dall'avvio del sistema
- in caso di successo e -1 in caso di errore.}
+ \bodydesc{La funzione ritorna il numero di \itindex{clock~tick}
+ \textit{clock tick} dall'avvio del sistema in caso di successo e -1 in
+ caso di errore.}
\end{prototype}
La funzione restituisce i valori di \textit{process time} del processo
PLL implementato dal kernel,
specificato nel campo
\var{constant} di \struct{timex}.\\
- \const{ADJ\_TICK} & 0x4000 & Imposta il valore dei tick del timer
- in microsecondi, espresso nel campo
- \var{tick} di \struct{timex}.\\
+ \const{ADJ\_TICK} & 0x4000 & Imposta il valore dei \textit{tick}
+ \itindex{clock~tick} del timer in
+ microsecondi, espresso nel campo
+ \var{tick} di \struct{timex}.\\
\const{ADJ\_OFFSET\_SINGLESHOT}&0x8001&Imposta uno spostamento una tantum
dell'orologio secondo il valore del
campo \var{offset} simulando il