[Avanti] [Indietro] [Su]
8.4.1 La misura del tempo in Unix
Storicamente i sistemi unix-like hanno sempre mantenuto due distinti tipi di dati per la misure dei
tempi all'interno del sistema: essi sono rispettivamente chiamati calendar time e process time, secondo
le definizioni:
-
calendar time
detto anche tempo di calendario. È il numero di secondi dalla mezzanotte del primo
gennaio 1970, in tempo universale coordinato (o UTC), data che viene usualmente
indicata con 00:00:00 Jan, 1 1970 (UTC) e chiamata the Epoch. Questo tempo viene
anche chiamato anche GMT (Greenwich Mean Time) dato che l'UTC corrisponde
all'ora locale di Greenwich. È il tempo su cui viene mantenuto l'orologio del kernel, e
viene usato ad esempio per indicare le date di modifica dei file o quelle di avvio dei
processi. Per memorizzare questo tempo è stato riservato il tipo primitivo time_t.
-
process time
detto talvolta tempo di processore. Viene misurato in 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 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.19
Il dato primitivo usato per questo tempo è clock_t, che ha quindi una risoluzione
del microsecondo. Il numero di tick al secondo può essere ricavato anche attraverso
sysconf (vedi sez. 8.1.2). Il vecchio simbolo CLK_TCK definito in time.h è ormai
considerato obsoleto.
In genere si usa il calendar time per esprimere le date dei file e le informazioni analoghe che
riguardano i cosiddetti tempi di orologio, che vengono usati ad esempio per i demoni che compiono
lavori amministrativi ad ore definite, come cron.
Di solito questo tempo viene convertito automaticamente dal valore in UTC al tempo locale,
utilizzando le opportune informazioni di localizzazione (specificate in /etc/timezone). E da tenere
presente che questo tempo è mantenuto dal sistema e non è detto che corrisponda al tempo tenuto
dall'orologio hardware del calcolatore.
Anche il process time di solito si esprime in secondi, ma provvede una precisione ovviamente
superiore al calendar time (che è mantenuto dal sistema con una granularità di un secondo) e viene
usato per tenere conto dei tempi di esecuzione dei processi. Per ciascun processo il kernel calcola tre
tempi diversi:
-
clock time
il tempo reale (viene chiamato anche wall clock time o elapsed time) passato dall'avvio
del processo. Chiaramente tale tempo dipende anche dal carico del sistema e da quanti
altri processi stavano girando nello stesso periodo.
-
user time
il tempo effettivo che il processore ha impiegato nell'esecuzione delle istruzioni del
processo in user space. È quello riportato nella risorsa ru_utime di rusage vista in
sez. 8.3.1.
-
system time
il tempo effettivo che il processore ha impiegato per eseguire codice delle system call
nel kernel per conto del processo. È quello riportato nella risorsa ru_stime di rusage
vista in sez. 8.3.1.
In genere la somma di user time e system time indica il tempo di processore totale che il sistema
ha effettivamente utilizzato per eseguire un certo processo, questo viene chiamato anche
CPU time o tempo di CPU. Si può ottenere un riassunto dei valori di questi tempi quando
si esegue un qualsiasi programma lanciando quest'ultimo come argomento del comando
time.
[Avanti] [Indietro] [Su]