Rimaneggiamenti generali
[gapil.git] / system.tex
index 067dd5988013c51e770c2c6ae49ef273209ededf..ca1fa7a98222e207f129532eb54e5b278b3f5974 100644 (file)
@@ -49,7 +49,7 @@ La prima funzionalit
 contengono le costanti necessarie definite come macro di preprocessore, per la
 seconda invece sono ovviamente necessarie delle funzioni. La situazione è
 complicata dal fatto che ci sono molti casi in cui alcuni di questi limiti
-sono fissi in unimplementazione mentre possono variare in un altra. Tutto
+sono fissi in un'implementazione mentre possono variare in un altra. Tutto
 questo crea una ambiguità che non è sempre possibile risolvere in maniera
 chiara; in generale quello che succede è che quando i limiti del sistema sono
 fissi essi vengono definiti come macro di preprocessore nel file
@@ -168,7 +168,7 @@ file, riportate in \tabref{tab:sys_file_macro}).
     \hline
     \hline
   \end{tabular}
-  \caption{Macro .}
+  \caption{Costanti per i limiti del sistema.}
   \label{tab:sys_generic_macro}
 \end{table}
 
@@ -476,7 +476,7 @@ suo prototipo 
 \subsection{La funzione \func{uname}}
 \label{sec:sys_uname}
 
-Unaltra funzione che si può utilizzare per raccogliere informazioni sia
+Un'altra funzione che si può utilizzare per raccogliere informazioni sia
 riguardo al sistema che al computer su cui esso sta girando è \func{uname}, il
 suo prototipo è:
 \begin{prototype}{sys/utsname.h}{int uname(struct utsname *info)}
@@ -636,7 +636,7 @@ Come accennato in \secref{sec:file_organization} per poter accedere ai file
 occorre prima rendere disponibile al sistema il filesystem su cui essi sono
 memorizzati; l'operazione di attivazione del filesystem è chiamata
 \textsl{montaggio}, per far questo in Linux\footnote{la funzione è specifica
-  di Linux e non è portabile} si usa la funzione \func{mount} il cui prototipo
+  di Linux e non è portabile.} si usa la funzione \func{mount} il cui prototipo
 è:
 \begin{prototype}{sys/mount.h}
 {mount(const char *source, const char *target, const char *filesystemtype, 
@@ -780,13 +780,13 @@ Una volta che non si voglia pi
   \macro{ENAMETOOLONG}, \macro{ENOENT} o \macro{ELOOP}.}
 \end{prototype}
 \noindent la funzione prende il nome della directory su cui il filesystem è
-montato e non il file o il dispositivo che è stato montato\footnote{questo è
+montato e non il file o il dispositivo che è stato montato,\footnote{questo è
   vero a partire dal kernel 2.3.99-pre7, prima esistevano due chiamate
   separate e la funzione poteva essere usata anche specificando il file di
-  dispositivo.}, in quanto con il kernel 2.4.x è possibile montare lo stesso
+  dispositivo.} in quanto con il kernel 2.4.x è possibile montare lo stesso
 dispositivo in più punti. Nel caso più di un filesystem sia stato montato
 sullo stesso \textit{mount point} viene smontato quello che è stato montato
-per ultimo. 
+per ultimo.
 
 Si tenga presente che la funzione fallisce quando il filesystem è
 \textsl{occupato}, questo avviene quando ci sono ancora file aperti sul
@@ -811,8 +811,8 @@ seconda del tipo di filesystem alcune (o tutte) possono essere superate,
 evitando l'errore di \macro{EBUSY}.  In tutti i casi prima dello smontaggio
 viene eseguita una sincronizzazione dei dati. 
 
-Altre due funzioni specifiche di Linux\footnote{esse si trovano anche su BSD,
-  ma con una struttura diversa}, utili per ottenere in maniera diretta
+Altre due funzioni specifiche di Linux,\footnote{esse si trovano anche su BSD,
+  ma con una struttura diversa.} utili per ottenere in maniera diretta
 informazioni riguardo al filesystem su cui si trova un certo file, sono
 \func{statfs} e \func{fstatfs}, i cui prototipi sono:
 \begin{functions}
@@ -868,7 +868,7 @@ relative a \file{/etc/mtab}), quando si debba scrivere un programma che
 effettua il montaggio di un filesystem; in realtà in questi casi è molto più
 semplice invocare direttamente il programma \cmd{mount}, per cui ne
 tralasceremo la trattazione, rimandando al manuale delle \acr{glibc}
-\cite{libc} per la documentazione completa.
+\cite{glibc} per la documentazione completa.
 
 
 \subsection{La gestione di utenti e gruppi}
@@ -964,13 +964,13 @@ 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}
+\subsection{La misura del tempo in Unix}
 \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 tipi di
+dati per la misure dei 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
@@ -980,11 +980,11 @@ definizioni:
   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 \type{time\_t}.
-\item \textit{process time}: talvolta anche detto tempo di CPU. Viene misurato
+\item \textit{process time}: detto anche tempo di processore. 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 è
+  secondo.\footnote{eccetto per la piattaforma alpha dove avvengono ogni
+    millesimo di secondo.} Il dato primitivo usato per questo tempo è
   \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});
@@ -992,32 +992,35 @@ definizioni:
   \secref{sec:sys_limits}).
 \end{itemize}
 
-In genere si usa il \textit{calendar time} per tenere le date dei file e le
-informazioni analoghe che riguardano i tempi di ``orologio'', usati ad esempio
-per i demoni che compiono lavori amministrativi ad ore definite, come
-\cmd{cron}. Di solito questo vene convertito automaticamente dal valore in UTC
-al tempo locale, utilizzando le opportune informazioni di localizzazione
+In genere si usa il \textit{calendar time} per esprimere le date dei file e le
+informazioni analoghe che riguardano i cosiddetti \textsl{tempi di orologio},
+che vengono usati ad esempio per i demoni che compiono lavori amministrativi
+ad ore definite, come \cmd{cron}. 
+
+Di solito questo tempo viene convertito automaticamente dal valore in UTC al
+tempo locale, utilizzando le opportune informazioni di localizzazione
 (specificate in \file{/etc/timezone}). E da tenere presente che questo tempo è
-mantenuto dal sistema e non corrisponde all'orologio hardware del calcolatore.
+mantenuto dal sistema e non è detto che corrisponda al tempo tenuto
+dall'orologio hardware del calcolatore.
 
-Il \textit{process time} di solito si esprime in secondi e viene usato appunto
-per tenere conto dei tempi di esecuzione dei processi. Per ciascun processo il
-kernel tiene tre di questi tempi: 
-\begin{itemize*}
-\item \textit{clock time}
-\item \textit{user time}
-\item \textit{system time}
-\end{itemize*}
-il primo è il tempo ``reale'' (viene anche chiamato \textit{wall clock time})
-dall'avvio del processo, e misura il tempo trascorso fino alla sua
-conclusione; chiaramente un tale tempo dipende anche dal carico del sistema e
-da quanti altri processi stavano girando nello stesso periodo. Il secondo
-tempo è quello che la CPU ha speso nell'esecuzione delle istruzioni del
-processo in user space. Il terzo è il tempo impiegato dal kernel per eseguire
-delle system call per conto del processo medesimo (tipo quello usato per
-eseguire una \func{write} su un file). In genere la somma di user e system
-time viene chiamato \textit{CPU time}. 
+Anche il \textit{process time} di solito si esprime in secondi, ma provvede una
+precisione ovviamente superiore al \textit{calendar time} (la cui granularità
+minima è il secondo) e viene usato per tenere conto dei tempi di esecuzione
+dei processi. Per ciascun processo il kernel calcola tre tempi diversi:
+\begin{description*}
+\item[\textit{clock time}]: il tempo \textsl{reale} (viene chiamato anche
+  \textit{wall clock 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.
+\item[\textit{user time}]: il tempo che la CPU ha impiegato nell'esecuzione
+  delle istruzioni del processo in user space.
+\item[\textit{system time}]: il tempo che la CPU ha impiegato nel kernel per
+  eseguire delle system call per conto del processo.
+\end{description*}
 
+In genere la somma di \textit{user time} e \textit{system time} indica il
+tempo di processore totale in cui il sistema è stato effettivamente impegnato
+nell'eseguire un certo processo e viene chiamato \textit{CPU time}.
 
 
 
@@ -1044,11 +1047,11 @@ costante \macro{EOF} (a seconda della funzione); ma questo valore segnala solo
 che c'è stato un errore, non il tipo di errore. 
 
 Per riportare il tipo di errore il sistema usa la variabile globale
-\var{errno}\footnote{L'uso di una variabile globale può comportare alcuni
+\var{errno},\footnote{L'uso di una variabile globale può comportare alcuni
   problemi (ad esempio nel caso dei thread) ma lo standard ISO C consente
   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
+  renderla locale ai singoli thread.} definita nell'header \file{errno.h}; la
 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
@@ -1095,7 +1098,7 @@ errore sconosciuto. La funzione utilizza una stringa statica che non deve
 essere modificata dal programma e che è utilizzabile solo fino ad una chiamata
 successiva a \func{strerror}; nel caso si usino i thread è
 provvista\footnote{questa funzione è una estensione GNU, non fa parte dello
-  standard POSIX} una versione apposita:
+  standard POSIX.} una versione apposita:
 \begin{prototype}{string.h}
 {char *strerror\_r(int errnum, char *buff, size\_t size)} 
   Analoga a \func{strerror} ma ritorna il messaggio in un buffer
@@ -1106,7 +1109,7 @@ provvista\footnote{questa funzione 
 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
-globale\footnote{anche questa è una estensione GNU}
+globale\footnote{anche questa è un'estensione GNU.}
 \var{program\_invocation\_short\_name} che riporta il nome del programma
 attualmente in esecuzione.