\chapter{La gestione del sistema}
\label{cha:system}
+In questo capitolo si è raccolta le trattazione delle varie funzioni
+concernenti la gestione generale del sistema che permettono di trattare le
+varie informazioni ad esso connesse, i limiti sulle risorse, la gestione dei
+tempi, degli errori e degli utenti ed in generale la gestione dei vari
+parametri di configurazione dei vari componenti del sistema.
+\section{La gestione della configurazione del sistema}
+\label{sec:sys_config}
+
+
+\subsection{Opzioni e configurazione del systema}
+\label{sec:sys_sys_config}
+
+La funzione \func{sysconf} ...
+
+\subsection{La configurazione dei file}
+\label{sec:sys_file_config}
+
+La funzione \func{statfs} ...
+
+La funzione \func{pathconf} ...
+
+
+\section{La gestione delle risorse e dei limiti di sistema}
+\label{sec:sys_limits}
+
+In questa sezione esamimeremo le funzioni che permettono di gestire le varie
+risorse associate ad un processo ed i relativi limiti, e quelle relatica al
+sistema in quanto tale.
+
+
+\begin{figure}[!htb]
+ \footnotesize
+ \centering
+ \begin{minipage}[c]{15cm}
+ \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
+struct rusage {
+ struct timeval ru_utime; /* user time used */
+ struct timeval ru_stime; /* system time used */
+ long ru_maxrss; /* maximum resident set size */
+ long ru_ixrss; /* integral shared memory size */
+ long ru_idrss; /* integral unshared data size */
+ long ru_isrss; /* integral unshared stack size */
+ long ru_minflt; /* page reclaims */
+ long ru_majflt; /* page faults */
+ long ru_nswap; /* swaps */
+ long ru_inblock; /* block input operations */
+ long ru_oublock; /* block output operations */
+ long ru_msgsnd; /* messages sent */
+ long ru_msgrcv; /* messages received */
+ long ru_nsignals; ; /* signals received */
+ long ru_nvcsw; /* voluntary context switches */
+ long ru_nivcsw; /* involuntary context switches */
+};
+ \end{lstlisting}
+ \end{minipage}
+ \normalsize
+ \caption{La struttura \var{rusage} per la lettura delle informazioni dei
+ delle risorse usate da un processo.}
+ \label{fig:sys_rusage_struct}
+\end{figure}
+
+
+
+
+\var{tms\_utime}, \var{tms\_stime}, \var{tms\_cutime}, \var{tms\_uetime}
+
+
+
+\section{La gestione dei tempi del sistema}
+\label{sec:sys_time}
+
+In questa sezione tratteremo le varie funzioni per la gestione delle
+date e del tempo in un sistema unix-like, e quelle per convertire i vari
+tempi nelle differenti rappresentazioni che vengono utilizzate.
\subsection{La misura del tempo in unix}
-\label{sec:intro_unix_time}
+\label{sec:sys_unix_time}
-Storicamente i sistemi unix-like hanno sempre mantenuto due distinti valori
-per i tempi all'interno del sistema, essi sono rispettivamente chiamati
-\textit{calendar time} e \textit{process time}, secondo le definizioni:
+Storicamente i sistemi unix-like hanno sempre mantenuto due distinti
+valori per i tempi all'interno del sistema, essi sono rispettivamente
+chiamati \textit{calendar time} e \textit{process time}, secondo le
+definizioni:
\begin{itemize}
\item \textit{calendar time}: è il numero di secondi dalla mezzanotte del
primo gennaio 1970, in tempo universale coordinato (o UTC), data che viene
dato che l'UTC corrisponde all'ora locale di Greenwich. È il tempo su cui
viene mantenuto l'orologio del calcolatore, 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 \func{time\_t}.
+ memorizzare questo tempo è stato riservato il tipo primitivo \type{time\_t}.
\item \textit{process time}: talvolta anche detto tempo di CPU. Viene misurato
in \textit{clock tick}, corrispondenti al numero di interruzioni effettuate
dal timer di sistema, e che per Linux avvengono ogni centesimo di
secondo\footnote{eccetto per la piattaforma alpha dove avvengono ogni
millesimo di secondo}. Il dato primitivo usato per questo tempo è
- \func{clock\_t}, inoltre la costante \macro{HZ} restituisce la frequenza di
+ \type{clock\_t}, inoltre la costante \macro{HZ} restituisce la frequenza di
operazione del timer, e corrisponde dunque al numero di tick al secondo. Lo
standard POSIX definisce allo stesso modo la costante \macro{CLK\_TCK});
questo valore può comunque essere ottenuto con \func{sysconf} (vedi
+
+
\section{La gestione degli errori}
-\label{sec:intro_errors}
+\label{sec:sys_errors}
La gestione degli errori è in genere una materia complessa. Inoltre il modello
utilizzato dai sistema unix-like è basato sull'architettura a processi, e
Esamineremo in questa sezione le sue caratteristiche principali.
-\subsection{La variabile \func{errno}}
-\label{sec:intro_errno}
+\subsection{La variabile \var{errno}}
+\label{sec:sys_errno}
Quasi tutte le funzioni delle librerie del C sono in grado di individuare e
riportare condizioni di errore, ed è una buona norma di programmazione
anche di definire \var{errno} come un \textit{modifiable lvalue}, quindi si
può anche usare una macro, e questo è infatti il modo usato da Linux per
renderla locale ai singoli thread }, definita nell'header \file{errno.h}, la
-variabile è in genere definita come \var{volatile} dato che può essere
+variabile è in genere definita come \type{volatile} dato che può essere
cambiata in modo asincrono da un segnale (per una descrizione dei segnali si
veda \secref{cha:signals}), ma dato che un manipolatore di segnale scritto
bene salva e ripristina il valore della variabile, di questo non è necessario
\subsection{Le funzioni \func{strerror} e \func{perror}}
-\label{sec:intro_strerror}
+\label{sec:sys_strerror}
Benché gli errori siano identificati univocamente dal valore numerico di
\var{errno} le librerie provvedono alcune funzioni e variabili utili per
prima funzione che si può usare per ricavare i messaggi di errore è
\func{strerror}, il cui prototipo è:
\begin{prototype}{string.h}{char * strerror(int errnum)}
- La funzione ritorna una stringa (statica) che descrive l'errore il cui
- codice è passato come parametro.
+ Ritorna una stringa (statica) che descrive l'errore il cui codice è passato
+ come parametro.
\end{prototype}
In generale \func{strerror} viene usata passando \var{errno} come parametro;
standard POSIX} una versione apposita:
\begin{prototype}{string.h}
{char * strerror\_r(int errnum, char * buff, size\_t size)}
- La funzione è analoga a \func{strerror} ma ritorna il messaggio in un buffer
- specificato da \var{buff} di lunghezza massima (compreso il terminatore)
- \var{size}.
+ Analoga a \func{strerror} ma ritorna il messaggio in un buffer
+ specificato da \param{buff} di lunghezza massima (compreso il terminatore)
+ \param{size}.
\end{prototype}
+\noindent
che utilizza un buffer che il singolo thread deve allocare, per evitare i
problemi connessi alla condivisione del buffer statico. Infine, per completare
la caratterizzazione dell'errore, si può usare anche la variabile
automatizzata sullo standard error (vedi \secref{sec:file_std_descr}) è
\func{perror}, il cui prototipo è:
\begin{prototype}{stdio.h}{void perror (const char *message)}
- La funzione stampa il messaggio di errore relativo al valore corrente di
- \var{errno} sullo standard error; preceduto dalla stringa \var{message}.
+ Stampa il messaggio di errore relativo al valore corrente di \var{errno}
+ sullo standard error; preceduto dalla stringa \var{message}.
\end{prototype}
i messaggi di errore stampati sono gli stessi di \func{strerror}, (riportati
in \capref{cha:errors}), e, usando il valore corrente di \var{errno}, si
}
\end{lstlisting}
\caption{Codice per la stampa del messaggio di errore standard.}
- \label{fig:intro_err_mess}
+ \label{fig:sys_err_mess}
\end{figure}
-\subsection{Valori e limiti del sistema}
-\label{sec:sys_limits}
+\section{La gestione di utenti e gruppi}
+\label{sec:sys_user_group}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "gapil"
+%%% End: