+Di norma tutte le operazioni del sistema fanno sempre riferimento al
+\textit{calendar time}, l'uso del \textit{process time} è riservato a quei
+casi in cui serve conoscere i tempi di esecuzione di un processo (ad esempio
+per valutarne l'efficienza). In tal caso infatti fare ricorso al
+\textit{calendar time} è inutile in quanto il tempo può essere trascorso mentre
+un altro processo era in esecuzione o in attesa del risultato di una
+operazione di I/O.
+
+La funzione più semplice per leggere il \textit{process time} di un processo è
+\func{clock}, che da una valutazione approssimativa del tempo di CPU
+utilizzato dallo stesso; il suo prototipo è:
+\begin{prototype}{time.h}{clock\_t clock(void)}
+ Legge il valore corrente del tempo di CPU.
+
+ \bodydesc{La funzione ritorna il tempo di CPU usato dal programma e -1 in
+ caso di errore.}
+\end{prototype}
+
+La funzione restituisce il tempo in tick, quindi se si vuole il tempo in
+secondi occorre moltiplicare il risultato per la costante
+\macro{CLOCKS\_PER\_SEC}.\footnote{le \acr{glibc} seguono lo standard ANSI C,
+ POSIX richiede che \macro{CLOCKS\_PER\_SEC} sia definito pari a 1000000
+ indipendetemente 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.
+
+Come accennato in \secref{sec:sys_unix_time} il tempo di CPU è la somma di
+altri due tempi, l'\textit{user time} ed il \textit{system time} che sono
+quelli effettivamente mantenuti dal kernel per ciascun processo. Questi
+possono essere letti attraverso la funzione \func{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.}
+\end{prototype}
+
+La funzione restituisce i valori di process time del processo corrente in una
+struttura di tipo \var{tms}, la cui definizione è riportata in
+\secref{fig:sys_tms_struct}. La struttura prevede quattro campi; i primi due,
+\var{tms\_utime} e \var{tms\_stime}, sono l'\textit{user time} ed il
+\textit{system time} del processo, così come definiti in
+\secref{sec:sys_unix_time}.
+
+\begin{figure}[!htb]
+ \footnotesize
+ \centering
+ \begin{minipage}[c]{15cm}
+ \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
+struct tms {
+ clock_t tms_utime; /* user time */
+ clock_t tms_stime; /* system time */
+ clock_t tms_cutime; /* user time of children */
+ clock_t tms_cstime; /* system time of children */
+};
+ \end{lstlisting}
+ \end{minipage}
+ \normalsize
+ \caption{La struttura \var{tms} dei tempi di processore associati a un
+ processo.}
+ \label{fig:sys_tms_struct}
+\end{figure}
+
+Gli altri due campi mantengono rispettivamente la somma dell'\textit{user
+ time} ed del \textit{system time} di tutti i processi figli che sono
+terminati; il kernel cioè somma in \var{tms\_cutime} il valore di
+\var{tms\_utime} e \var{tms\_cutime} per ciascun figlio del quale è stato
+ricevuto lo stato di terminazione, e lo stesso vale per \var{tms\_cstime}.
+
+Si tenga conto che l'aggiornamento di \var{tms\_cutime} e \var{tms\_cstime}
+viene eseguito solo quando una chiamata a \func{wait} o \func{waitpid} è
+ritornata. Per questo motivo se un figlio termina prima di altri suoi figli,
+questi ``nipoti'' non potranno essere considerati nel calcolo di questi tempi.
+
+
+
+\subsection{Le funzioni per il \textit{calendar time}}
+\label{sec:sys_time_base}
+
+Come anticipato in \secref{sec:sys_unix_time} il \textit{calendar time} è
+mantenuto dal kernel in una variabile di tipo \type{time\_t}, che usualmente
+corrisponde ad un tipo nativo (in Linux è un intero a 32 bit). Il valore
+corrente del \textit{calendar time} può essere ottenuto con la funzione
+\func{time} che lo restituisce in nel suddetto formato; il suo prototipo è:
+\begin{prototype}{time.h}{time\_t time(time\_t *t)}
+ Legge il valore corrente del \textit{calendar time}.
+
+ \bodydesc{La funzione ritorna valore del \textit{calendar time} in caso di
+ successo e -1 in caso di errore, che può essere solo \macro{EFAULT}.}
+\end{prototype}
+\noindent dove \param{t}, se non nullo, è l'indirizzo su cui salvare il valore
+di ritorno.
+
+Analoga a \func{time} è la funzione \func{stime} che serve per effettuare
+l'operazione inversa, e cioè per settare l'orologio di sistema; il suo
+prototipo è:
+\begin{prototype}{time.h}{int stime(time\_t *t)}
+ Setta a \param{t} il valore corrente del \textit{calendar time}.
+
+ \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
+ che può essere \macro{EFAULT} o \macro{EPERM}.}
+\end{prototype}
+
+Dato che modificare l'ora ha un impatto su tutto il sistema, la funzione può
+essere usata solo dall'ammninistratore.
+
+
+Dato che il tempo misurato in termini di\type{time\_t} ha comunque una
+risoluzione massima di un secondo le \acr{glibc} provvedono delle
+rappresentazioni alternative che consentono di indicare intervalli o tempi con
+precisioni maggiori del secondo, queste sono realizzate attraverso le
+strutture \var{timeval} e \var{timespec}, le cui definizioni sono riportate in
+\figref{fig:sys_timeval_struct}, che consentono rispettivamente precisioni del
+microsecondo e del nanosecondo\footnote{la precisione è solo astratta,
+ l'orologio di sistema normalmente non è in grado di misuare dei tempi con
+ precisioni simili.}.
+
+
+\begin{figure}[!htb]
+ \footnotesize
+ \centering
+ \begin{minipage}[c]{15cm}
+ \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
+struct timeval
+{
+ long tv_sec; /* seconds */
+ long tv_usec; /* microseconds */
+};
+struct timespec {
+ time_t tv_sec; /* seconds */
+ long tv_nsec; /* nanoseconds */
+};
+ \end{lstlisting}
+ \end{minipage}
+ \normalsize
+ \caption{Le strutture \var{timeval} e \var{timespec} per il calendar time.}
+ \label{fig:sys_timeval_struct}
+\end{figure}
+
+Data la scarsa precisione nell'uso di \type{time\_t} per le operazioni sui
+tempi di norma l'uso delle funzioni precedenti è di norma sconsigliato, ed
+esse sono di solito sostituite da \func{gettimeofday} e \func{settimeofday}
+
+