X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=a1aa32fab1dfc0e55d2e7390685d60bf95b03822;hp=2ca86bf8b3cb74ebaaf0204f6befd77ebcb305f2;hb=cdc1b275bbd83ad0dbf1ba4be801118724a51085;hpb=b6d559b9429afcc0d64137913e8f16d49857a6c9 diff --git a/system.tex b/system.tex index 2ca86bf..a1aa32f 100644 --- a/system.tex +++ b/system.tex @@ -1,16 +1,40 @@ \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, come i limiti sulle risorse, la +gestione dei tempi, degli errori, degli utenti ed in generale dei vari +parametri di configurazione del sistema. +\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. + + +\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 @@ -19,13 +43,13 @@ per i tempi all'interno del sistema, essi sono rispettivamente chiamati 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 @@ -60,8 +84,10 @@ time viene chiamato \textit{CPU time}. + + \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 @@ -69,8 +95,8 @@ presenta una serie di problemi nel caso lo si debba usare con i thread. 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 @@ -87,7 +113,7 @@ Per riportare il tipo di errore il sistema usa la variabile globale 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 @@ -115,7 +141,7 @@ verificato il fallimento della funzione attraverso il suo codice di ritorno. \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 @@ -123,8 +149,8 @@ riportare in opportuni messaggi le condizioni di errore verificatesi. La 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; @@ -136,10 +162,11 @@ provvista\footnote{questa funzione 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 @@ -151,8 +178,8 @@ Una seconda funzione usata per riportare i codici di errore in maniera 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 @@ -205,10 +232,5 @@ o la macro (\texttt{\small 15--17}) associate a quel codice. } \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} -