From: Simone Piccardi Date: Thu, 11 Oct 2007 13:23:47 +0000 (+0000) Subject: Qualche indicizzazione e dei TODO sui timer (su indicazioni di Alessio X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=b0791722f0c81dc696b6396dfdc63e000468a6a7 Qualche indicizzazione e dei TODO sui timer (su indicazioni di Alessio Frusciante). --- diff --git a/prochand.tex b/prochand.tex index 7301bae..df04b61 100644 --- a/prochand.tex +++ b/prochand.tex @@ -155,7 +155,8 @@ periodico secondo la frequenza specificata dalla costante \const{HZ},\footnote{fino al kernel 2.4 il valore usuale di questa costante era 100, per tutte le architetture eccetto l'alpha, per la quale era 1000, nel 2.6 è stato portato a 1000 su tutte le architetture; occorre fare - attenzione a non confondere questo valore con quello dei clock tick (vedi + attenzione a non confondere questo valore con quello dei + \itindex{clock~tick} \textit{clock tick} (vedi sez.~\ref{sec:sys_unix_time}).} definita in \file{asm/param.h}, ed il cui valore è espresso in Hertz.\footnote{a partire dal kernel 2.6.21 è stato introdotto (a cura di Ingo Molnar) un meccanismo completamente diverso, diff --git a/signal.tex b/signal.tex index 43d2fe7..3341dae 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 è: @@ -2562,7 +2564,9 @@ 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} @@ -2574,6 +2578,9 @@ dedicato alla gestione, che potrebbe riceverlo fra due chiamate successive. % 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 diff --git a/system.tex b/system.tex index 469e2ea..37c6085 100644 --- a/system.tex +++ b/system.tex @@ -341,7 +341,8 @@ relative spiegazioni, si pu 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 @@ -1816,18 +1817,19 @@ rispettivamente chiamati \itindend{calendar~time} \textit{calendar time} e 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 @@ -1895,11 +1897,11 @@ utilizzato dallo stesso; il suo prototipo 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. @@ -1911,8 +1913,9 @@ possono essere letti attraverso la funzione \funcd{times}, il cui prototipo \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 @@ -2153,9 +2156,10 @@ campi della struttura \struct{timex} pu 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