Aggiornamenti del copyright all'anno nuovo, e risistemazione delle
[gapil.git] / system.tex
index 446c0f67c51648c1ad29ad48f441b57495ccddea..f2569bf90a08beaedfe5654b421cbfe5fd784a78 100644 (file)
@@ -1,6 +1,6 @@
 %% system.tex
 %%
 %% system.tex
 %%
-%% Copyright (C) 2000-2005 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2007 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -8,6 +8,7 @@
 %% license is included in the section entitled "GNU Free Documentation
 %% License".
 %%
 %% license is included in the section entitled "GNU Free Documentation
 %% License".
 %%
+
 \chapter{La gestione del sistema, del tempo e degli errori}
 \label{cha:system}
 
 \chapter{La gestione del sistema, del tempo e degli errori}
 \label{cha:system}
 
@@ -149,7 +150,7 @@ sez.~\ref{sec:sys_file_limits}.
 
 Purtroppo la sezione dello standard che tratta questi argomenti è una delle
 meno chiare\footnote{tanto che Stevens, in \cite{APUE}, la porta come esempio
 
 Purtroppo la sezione dello standard che tratta questi argomenti è una delle
 meno chiare\footnote{tanto che Stevens, in \cite{APUE}, la porta come esempio
-  di ``standardese''.}. Lo standard prevede che ci siano 13 macro che
+  di ``\textsl{standardese}''.}. Lo standard prevede che ci siano 13 macro che
 descrivono le caratteristiche del sistema (7 per le caratteristiche generiche,
 riportate in tab.~\ref{tab:sys_generic_macro}, e 6 per le caratteristiche dei
 file, riportate in tab.~\ref{tab:sys_file_macro}).
 descrivono le caratteristiche del sistema (7 per le caratteristiche generiche,
 riportate in tab.~\ref{tab:sys_generic_macro}, e 6 per le caratteristiche dei
 file, riportate in tab.~\ref{tab:sys_file_macro}).
@@ -218,7 +219,7 @@ riportati in tab.~\ref{tab:sys_posix1_general}.
     \const{\_POSIX\_STREAM\_MAX} &    8& massimo numero di stream aperti per
                                          processo in contemporanea.\\
     \const{\_POSIX\_TZNAME\_MAX} &     & dimensione massima del nome di una
     \const{\_POSIX\_STREAM\_MAX} &    8& massimo numero di stream aperti per
                                          processo in contemporanea.\\
     \const{\_POSIX\_TZNAME\_MAX} &     & dimensione massima del nome di una
-                                         \texttt{timezone} (vedi
+                                         \textit{timezone} (vedi
                                          sez.~\ref{sec:sys_date}). \\ 
     \const{\_POSIX\_NGROUPS\_MAX}&    0& numero di gruppi supplementari per
                                          processo (vedi 
                                          sez.~\ref{sec:sys_date}). \\ 
     \const{\_POSIX\_NGROUPS\_MAX}&    0& numero di gruppi supplementari per
                                          processo (vedi 
@@ -403,7 +404,7 @@ riportate in tab.~\ref{tab:sys_file_macro}.
     \const{LINK\_MAX}   &8  & numero massimo di link a un file\\
     \const{NAME\_MAX}&  14  & lunghezza in byte di un nome di file. \\
     \const{PATH\_MAX}& 256  & lunghezza in byte di un
     \const{LINK\_MAX}   &8  & numero massimo di link a un file\\
     \const{NAME\_MAX}&  14  & lunghezza in byte di un nome di file. \\
     \const{PATH\_MAX}& 256  & lunghezza in byte di un
-                              \itindex{pathname}\textit{pathname}.\\
+                              \itindex{pathname} \textit{pathname}.\\
     \const{PIPE\_BUF}&4096  & byte scrivibili atomicamente in una pipe
                               (vedi sez.~\ref{sec:ipc_pipes}).\\
     \const{MAX\_CANON}&255  & dimensione di una riga di terminale in modo 
     \const{PIPE\_BUF}&4096  & byte scrivibili atomicamente in una pipe
                               (vedi sez.~\ref{sec:ipc_pipes}).\\
     \const{MAX\_CANON}&255  & dimensione di una riga di terminale in modo 
@@ -434,7 +435,7 @@ le analoghe di tab.~\ref{tab:sys_posix1_general}.
     \const{\_POSIX\_LINK\_MAX}   &8  & numero massimo di link a un file.\\
     \const{\_POSIX\_NAME\_MAX}&  14  & lunghezza in byte di un nome di file. \\
     \const{\_POSIX\_PATH\_MAX}& 256  & lunghezza in byte di un 
     \const{\_POSIX\_LINK\_MAX}   &8  & numero massimo di link a un file.\\
     \const{\_POSIX\_NAME\_MAX}&  14  & lunghezza in byte di un nome di file. \\
     \const{\_POSIX\_PATH\_MAX}& 256  & lunghezza in byte di un 
-                                  \itindex{pathname}\textit{pathname}.\\
+                                  \itindex{pathname} \textit{pathname}.\\
     \const{\_POSIX\_PIPE\_BUF}& 512  & byte scrivibili atomicamente in una
     pipe.\\
     \const{\_POSIX\_MAX\_CANON}&255  & dimensione di una riga di
     \const{\_POSIX\_PIPE\_BUF}& 512  & byte scrivibili atomicamente in una
     pipe.\\
     \const{\_POSIX\_MAX\_CANON}&255  & dimensione di una riga di
@@ -477,12 +478,12 @@ E si noti come la funzione in questo caso richieda un argomento che specifichi
 a quale file si fa riferimento, dato che il valore del limite cercato può
 variare a seconda del filesystem. Una seconda versione della funzione,
 \funcd{fpathconf}, opera su un file descriptor invece che su un
 a quale file si fa riferimento, dato che il valore del limite cercato può
 variare a seconda del filesystem. Una seconda versione della funzione,
 \funcd{fpathconf}, opera su un file descriptor invece che su un
-\itindex{pathname}\textit{pathname}. Il suo prototipo è:
+\itindex{pathname} \textit{pathname}. Il suo prototipo è:
 \begin{prototype}{unistd.h}{long fpathconf(int fd, int name)}
   Restituisce il valore del parametro \param{name} per il file \param{fd}.
   
   \bodydesc{È identica a \func{pathconf} solo che utilizza un file descriptor
 \begin{prototype}{unistd.h}{long fpathconf(int fd, int name)}
   Restituisce il valore del parametro \param{name} per il file \param{fd}.
   
   \bodydesc{È identica a \func{pathconf} solo che utilizza un file descriptor
-    invece di un \itindex{pathname}\textit{pathname}; pertanto gli errori
+    invece di un \itindex{pathname} \textit{pathname}; pertanto gli errori
     restituiti cambiano di conseguenza.}
 \end{prototype}
 \noindent ed il suo comportamento è identico a quello di \func{pathconf}.
     restituiti cambiano di conseguenza.}
 \end{prototype}
 \noindent ed il suo comportamento è identico a quello di \func{pathconf}.
@@ -601,7 +602,7 @@ maniera gerarchica all'interno di un albero;\footnote{si tenga presente che
   occorrerà includere anche i file \file{linux/unistd.h} e
   \file{linux/sysctl.h}.} per accedere ad uno di essi occorre specificare un
 cammino attraverso i vari nodi dell'albero, in maniera analoga a come avviene
   occorrerà includere anche i file \file{linux/unistd.h} e
   \file{linux/sysctl.h}.} per accedere ad uno di essi occorre specificare un
 cammino attraverso i vari nodi dell'albero, in maniera analoga a come avviene
-per la risoluzione di un \itindex{pathname}\textit{pathname} (da cui l'uso
+per la risoluzione di un \itindex{pathname} \textit{pathname} (da cui l'uso
 alternativo del filesystem \file{/proc}, che vedremo dopo).
 
 Ciascun nodo dell'albero è identificato da un valore intero, ed il cammino che
 alternativo del filesystem \file{/proc}, che vedremo dopo).
 
 Ciascun nodo dell'albero è identificato da un valore intero, ed il cammino che
@@ -645,7 +646,7 @@ forma di file alcune delle strutture interne del kernel stesso.
 
 In particolare l'albero dei valori di \func{sysctl} viene presentato in forma
 di file nella directory \file{/proc/sys}, cosicché è possibile accedervi
 
 In particolare l'albero dei valori di \func{sysctl} viene presentato in forma
 di file nella directory \file{/proc/sys}, cosicché è possibile accedervi
-specificando un \itindex{pathname}\textit{pathname} e leggendo e scrivendo sul
+specificando un \itindex{pathname} \textit{pathname} e leggendo e scrivendo sul
 file corrispondente al parametro scelto.  Il kernel si occupa di generare al
 volo il contenuto ed i nomi dei file corrispondenti, e questo ha il grande
 vantaggio di rendere accessibili i vari parametri a qualunque comando di shell
 file corrispondente al parametro scelto.  Il kernel si occupa di generare al
 volo il contenuto ed i nomi dei file corrispondenti, e questo ha il grande
 vantaggio di rendere accessibili i vari parametri a qualunque comando di shell
@@ -701,7 +702,7 @@ sulla directory \param{target}.
     \textit{mount point} o di spostarlo quando \param{target} non è un
     \textit{mount point} o è \file{/}.
   \item[\errcode{EACCES}] non si ha il permesso di accesso su uno dei
     \textit{mount point} o di spostarlo quando \param{target} non è un
     \textit{mount point} o è \file{/}.
   \item[\errcode{EACCES}] non si ha il permesso di accesso su uno dei
-    componenti del \itindex{pathname}\textit{pathname}, o si è cercato
+    componenti del \itindex{pathname} \textit{pathname}, o si è cercato
     di montare un filesystem disponibile in sola lettura senza averlo
     specificato o il device \param{source} è su un filesystem montato con
     l'opzione \const{MS\_NODEV}.
     di montare un filesystem disponibile in sola lettura senza averlo
     specificato o il device \param{source} è su un filesystem montato con
     l'opzione \const{MS\_NODEV}.
@@ -765,25 +766,27 @@ valori riportati in tab.~\ref{tab:sys_mount_flags}.
     \textbf{Parametro} & \textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
     \textbf{Parametro} & \textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
-    \const{MS\_RDONLY}     &  1 & monta in sola lettura\\
+    \const{MS\_RDONLY}     &  1 & monta in sola lettura.\\
     \const{MS\_NOSUID}     &  2 & ignora i bit \itindex{suid~bit} \acr{suid} e
     \const{MS\_NOSUID}     &  2 & ignora i bit \itindex{suid~bit} \acr{suid} e
-                                  \itindex{sgid~bit}\acr{sgid}\\ 
-    \const{MS\_NODEV}      &  4 & impedisce l'accesso ai file di dispositivo\\
-    \const{MS\_NOEXEC}     &  8 & impedisce di eseguire programmi \\
-    \const{MS\_SYNCHRONOUS}& 16 & abilita la scrittura sincrona \\
-    \const{MS\_REMOUNT}    & 32 & rimonta il filesystem cambiando i flag\\
-    \const{MS\_MANDLOCK}   & 64 & consente il \textit{mandatory locking} (vedi
-                                  sez.~\ref{sec:file_mand_locking})\\
-    \const{S\_WRITE}      & 128 & scrive normalmente \\
-    \const{S\_APPEND}     & 256 & consente la scrittura solo in \textit{append
-                                  mode} (vedi sez.~\ref{sec:file_sharing})\\
-    \const{S\_IMMUTABLE}  & 512 & impedisce che si possano modificare i file \\
+                                  \itindex{sgid~bit} \acr{sgid}.\\ 
+    \const{MS\_NODEV}      &  4 & impedisce l'accesso ai file di dispositivo.\\
+    \const{MS\_NOEXEC}     &  8 & impedisce di eseguire programmi.\\
+    \const{MS\_SYNCHRONOUS}& 16 & abilita la scrittura sincrona.\\
+    \const{MS\_REMOUNT}    & 32 & rimonta il filesystem cambiando le opzioni.\\
+    \const{MS\_MANDLOCK}   & 64 & consente il \textit{mandatory locking} 
+                                  \itindex{mandatory~locking} (vedi
+                                  sez.~\ref{sec:file_mand_locking}).\\
+    \const{S\_WRITE}      & 128 & scrive normalmente.\\
+    \const{S\_APPEND}     & 256 & consente la scrittura solo in
+                                  \itindex{append~mode} \textit{append mode} 
+                                  (vedi sez.~\ref{sec:file_sharing}).\\
+    \const{S\_IMMUTABLE}  & 512 & impedisce che si possano modificare i file.\\
     \const{MS\_NOATIME}   &1024 & non aggiorna gli \textit{access time} (vedi
     \const{MS\_NOATIME}   &1024 & non aggiorna gli \textit{access time} (vedi
-                                  sez.~\ref{sec:file_file_times})\\
+                                  sez.~\ref{sec:file_file_times}).\\
     \const{MS\_NODIRATIME}&2048 & non aggiorna gli \textit{access time} delle
     \const{MS\_NODIRATIME}&2048 & non aggiorna gli \textit{access time} delle
-                                  directory\\
-    \const{MS\_BIND}      &4096 & monta il filesystem altrove\\
-    \const{MS\_MOVE}      &8192 & sposta atomicamente il punto di montaggio \\
+                                  directory.\\
+    \const{MS\_BIND}      &4096 & monta il filesystem altrove.\\
+    \const{MS\_MOVE}      &8192 & sposta atomicamente il punto di montaggio.\\
     \hline
   \end{tabular}
   \caption{Tabella dei codici dei flag di montaggio di un filesystem.}
     \hline
   \end{tabular}
   \caption{Tabella dei codici dei flag di montaggio di un filesystem.}
@@ -916,7 +919,7 @@ tralasceremo la trattazione, rimandando al manuale delle \acr{glibc}
 \label{sec:sys_user_group}
 
 Tradizionalmente le informazioni utilizzate nella gestione di utenti e gruppi
 \label{sec:sys_user_group}
 
 Tradizionalmente le informazioni utilizzate nella gestione di utenti e gruppi
-(password, corripondenze fra nomi simbolici e user-id, home directory, ecc.)
+(password, corrispondenze fra nomi simbolici e user-id, home directory, ecc.)
 venivano registrate all'interno dei due file di testo \file{/etc/passwd} ed
 \file{/etc/group},\footnote{in realtà oltre a questi nelle distribuzioni più
   recenti è stato introdotto il sistema delle \textit{shadow password} che
 venivano registrate all'interno dei due file di testo \file{/etc/passwd} ed
 \file{/etc/group},\footnote{in realtà oltre a questi nelle distribuzioni più
   recenti è stato introdotto il sistema delle \textit{shadow password} che
@@ -947,11 +950,11 @@ dall'altra con il diffondersi delle reti la necessit
 informazioni degli utenti e dei gruppi per insiemi di macchine, in modo da
 mantenere coerenti i dati, ha portato anche alla necessità di poter recuperare
 e memorizzare dette informazioni su supporti diversi, introducendo il sistema
 informazioni degli utenti e dei gruppi per insiemi di macchine, in modo da
 mantenere coerenti i dati, ha portato anche alla necessità di poter recuperare
 e memorizzare dette informazioni su supporti diversi, introducendo il sistema
-del \itindex{Name~Service~Switch}\textit{Name Service Switch} che tratteremo
+del \itindex{Name~Service~Switch} \textit{Name Service Switch} che tratteremo
 brevemente più avanti (in sez.~\ref{sec:sock_resolver}) dato che la maggior
 parte delle sua applicazioni sono relative alla risoluzioni di nomi di rete.
 
 brevemente più avanti (in sez.~\ref{sec:sock_resolver}) dato che la maggior
 parte delle sua applicazioni sono relative alla risoluzioni di nomi di rete.
 
-In questo paragrafo ci limiteremo comunque a trattere le funzioni classiche
+In questo paragrafo ci limiteremo comunque a trattare le funzioni classiche
 per la lettura delle informazioni relative a utenti e gruppi tralasciando
 completamente quelle relative all'autenticazione. 
 %  Per questo non tratteremo
 per la lettura delle informazioni relative a utenti e gruppi tralasciando
 completamente quelle relative all'autenticazione. 
 %  Per questo non tratteremo
@@ -1081,7 +1084,7 @@ fig.~\ref{fig:sys_group_struct}.
 
 Le funzioni viste finora sono in grado di leggere le informazioni sia
 direttamente dal file delle password in \file{/etc/passwd} che tramite il
 
 Le funzioni viste finora sono in grado di leggere le informazioni sia
 direttamente dal file delle password in \file{/etc/passwd} che tramite il
-sistema del \itindex{Name~Service~Switch}\textit{Name Service Switch} e
+sistema del \itindex{Name~Service~Switch} \textit{Name Service Switch} e
 sono completamente generiche. Si noti però che non c'è una funzione che
 permetta di impostare direttamente una password.\footnote{in realtà questo può
   essere fatto ricorrendo a PAM, ma questo è un altro discorso.} Dato che
 sono completamente generiche. Si noti però che non c'è una funzione che
 permetta di impostare direttamente una password.\footnote{in realtà questo può
   essere fatto ricorrendo a PAM, ma questo è un altro discorso.} Dato che
@@ -1379,7 +1382,7 @@ system call eseguite per conto del processo.
 
 Gli altri tre campi servono a quantificare l'uso della memoria
 virtuale\index{memoria~virtuale} e corrispondono rispettivamente al numero di
 
 Gli altri tre campi servono a quantificare l'uso della memoria
 virtuale\index{memoria~virtuale} e corrispondono rispettivamente al numero di
-\textit{page fault}\itindex{page~fault} (vedi sez.~\ref{sec:proc_mem_gen})
+\itindex{page~fault} \textit{page fault} (vedi sez.~\ref{sec:proc_mem_gen})
 avvenuti senza richiedere I/O su disco (i cosiddetti \textit{minor page
   fault}), a quelli che invece han richiesto I/O su disco (detti invece
 \textit{major page fault}) ed al numero di volte che il processo è stato
 avvenuti senza richiedere I/O su disco (i cosiddetti \textit{minor page
   fault}), a quelli che invece han richiesto I/O su disco (detti invece
 \textit{major page fault}) ed al numero di volte che il processo è stato
@@ -1420,7 +1423,7 @@ ricevuto lo stato di terminazione.
 \label{sec:sys_resource_limit}
 
 Come accennato nell'introduzione il kernel mette a disposizione delle
 \label{sec:sys_resource_limit}
 
 Come accennato nell'introduzione il kernel mette a disposizione delle
-funzionalita che permettono non solo di mantenere dati statistici relativi
+funzionalità che permettono non solo di mantenere dati statistici relativi
 all'uso delle risorse, ma anche di imporre dei limiti precisi sul loro
 utilizzo da parte dei vari processi o degli utenti.
 
 all'uso delle risorse, ma anche di imporre dei limiti precisi sul loro
 utilizzo da parte dei vari processi o degli utenti.
 
@@ -1444,7 +1447,7 @@ fatto solo fino al valore del secondo, che per questo viene detto \textit{hard
     \hline
     \hline
     \const{RLIMIT\_AS}     &  La dimensione massima della memoria virtuale di
     \hline
     \hline
     \const{RLIMIT\_AS}     &  La dimensione massima della memoria virtuale di
-                              un processo, il cosidetto \textit{Address
+                              un processo, il cosiddetto \textit{Address
                                 Space}, (vedi sez.~\ref{sec:proc_mem_gen}). Se
                               il limite viene superato dall'uso di funzioni
                               come \func{brk}, \func{mremap} o \func{mmap}
                                 Space}, (vedi sez.~\ref{sec:proc_mem_gen}). Se
                               il limite viene superato dall'uso di funzioni
                               come \func{brk}, \func{mremap} o \func{mmap}
@@ -1454,12 +1457,12 @@ fatto solo fino al valore del secondo, che per questo viene detto \textit{hard
                               stack il processo riceverà un segnale di
                               \const{SIGSEGV}. \\  
     \const{RLIMIT\_CORE}   &  La massima dimensione per di un file di
                               stack il processo riceverà un segnale di
                               \const{SIGSEGV}. \\  
     \const{RLIMIT\_CORE}   &  La massima dimensione per di un file di
-                              \textit{core dump}\itindex{core~dump} (vedi
+                              \itindex{core~dump} \textit{core dump} (vedi
                               sez.~\ref{sec:sig_prog_error}) creato nella
                               terminazione di un processo; file di dimensioni 
                               maggiori verranno troncati a questo valore,
                               mentre con un valore si bloccherà la creazione
                               sez.~\ref{sec:sig_prog_error}) creato nella
                               terminazione di un processo; file di dimensioni 
                               maggiori verranno troncati a questo valore,
                               mentre con un valore si bloccherà la creazione
-                              dei \textit{core dump}\itindex{core~dump}.\\ 
+                              dei \itindex{core~dump} \textit{core dump}.\\ 
     \const{RLIMIT\_CPU}    &  Il massimo tempo di CPU (vedi
                               sez.~\ref{sec:sys_cpu_times}) che il processo può
                               usare. Il superamento del limite corrente
     \const{RLIMIT\_CPU}    &  Il massimo tempo di CPU (vedi
                               sez.~\ref{sec:sys_cpu_times}) che il processo può
                               usare. Il superamento del limite corrente
@@ -1469,7 +1472,7 @@ fatto solo fino al valore del secondo, che per questo viene detto \textit{hard
                               il processo. Il superamento del limite massimo
                               comporta l'emissione di un segnale di
                               \const{SIGKILL}.\footnotemark\\
                               il processo. Il superamento del limite massimo
                               comporta l'emissione di un segnale di
                               \const{SIGKILL}.\footnotemark\\
-    \const{RLIMIT\_DATA}   &  La massima dimensione del ndex{segmento!dati}
+    \const{RLIMIT\_DATA}   &  La massima dimensione del \index{segmento!dati}
                               segmento dati di un 
                               processo (vedi sez.~\ref{sec:proc_mem_layout}).
                               Il tentativo di allocare più memoria di quanto
                               segmento dati di un 
                               processo (vedi sez.~\ref{sec:proc_mem_layout}).
                               Il tentativo di allocare più memoria di quanto
@@ -1485,7 +1488,7 @@ fatto solo fino al valore del secondo, che per questo viene detto \textit{hard
                               un errore di \errcode{EFBIG}.\\
     \const{RLIMIT\_LOCKS}&    È un limite presente solo nelle prime versioni
                               del kernel 2.4 sul numero massimo di
                               un errore di \errcode{EFBIG}.\\
     \const{RLIMIT\_LOCKS}&    È un limite presente solo nelle prime versioni
                               del kernel 2.4 sul numero massimo di
-                              \index{file!locking}\textit{file lock} (vedi
+                              \index{file!locking} \textit{file lock} (vedi
                               sez.~\ref{sec:file_locking}) che un
                               processo poteva effettuare.\\ 
     \const{RLIMIT\_MEMLOCK}&  L'ammontare massimo di memoria che può essere
                               sez.~\ref{sec:file_locking}) che un
                               processo poteva effettuare.\\ 
     \const{RLIMIT\_MEMLOCK}&  L'ammontare massimo di memoria che può essere
@@ -1541,12 +1544,12 @@ fatto solo fino al valore del secondo, che per questo viene detto \textit{hard
 
 In generale il superamento di un limite corrente\footnote{di norma quanto
   riportato in tab.~\ref{tab:sys_rlimit_values} fa riferimento a quanto
 
 In generale il superamento di un limite corrente\footnote{di norma quanto
   riportato in tab.~\ref{tab:sys_rlimit_values} fa riferimento a quanto
-  avviene al superamento del limite corrente, con l'eccesione
+  avviene al superamento del limite corrente, con l'eccezione
   \const{RLIMIT\_CPU} in cui si ha in comportamento diverso per il superamento
   dei due limiti.}  comporta o l'emissione di un segnale o il fallimento della
 system call che lo ha provocato;\footnote{si nuovo c'è una eccezione per
   \const{RLIMIT\_CORE} che influenza soltanto la dimensione (o l'eventuale
   \const{RLIMIT\_CPU} in cui si ha in comportamento diverso per il superamento
   dei due limiti.}  comporta o l'emissione di un segnale o il fallimento della
 system call che lo ha provocato;\footnote{si nuovo c'è una eccezione per
   \const{RLIMIT\_CORE} che influenza soltanto la dimensione (o l'eventuale
-  creazinone) dei file di \itindex{core~dump}\textit{core dump}.} per
+  creazione) dei file di \itindex{core~dump} \textit{core dump}.} per
 permettere di leggere e di impostare i limiti di utilizzo delle risorse da
 parte di un processo sono previste due funzioni, \funcd{getrlimit} e
 \funcd{setrlimit}, i cui prototipi sono:
 permettere di leggere e di impostare i limiti di utilizzo delle risorse da
 parte di un processo sono previste due funzioni, \funcd{getrlimit} e
 \funcd{setrlimit}, i cui prototipi sono:
@@ -1601,7 +1604,7 @@ Nello specificare un limite, oltre a fornire dei valori specifici, si pu
 anche usare la costante \const{RLIM\_INFINITY} che permette di sbloccare l'uso
 di una risorsa; ma si ricordi che solo un processo con i privilegi di
 amministratore\footnote{per essere precisi in questo caso quello che serve è
 anche usare la costante \const{RLIM\_INFINITY} che permette di sbloccare l'uso
 di una risorsa; ma si ricordi che solo un processo con i privilegi di
 amministratore\footnote{per essere precisi in questo caso quello che serve è
-  la \itindex{capabilities}\textit{capability} \const{CAP\_SYS\_RESOURCE}.}
+  la \itindex{capabilities} \textit{capability} \const{CAP\_SYS\_RESOURCE}.}
 può innalzare un limite al di sopra del valore corrente del limite massimo ed
 usare un valore qualsiasi per entrambi i limiti. Si tenga conto infine che
 tutti i limiti vengono ereditati dal processo padre attraverso una \func{fork}
 può innalzare un limite al di sopra del valore corrente del limite massimo ed
 usare un valore qualsiasi per entrambi i limiti. Si tenga conto infine che
 tutti i limiti vengono ereditati dal processo padre attraverso una \func{fork}
@@ -1614,7 +1617,7 @@ attraverso una \func{exec} (vedi sez.~\ref{sec:proc_exec}).
 
 La gestione della memoria è già stata affrontata in dettaglio in
 sez.~\ref{sec:proc_memory}; abbiamo visto allora che il kernel provvede il
 
 La gestione della memoria è già stata affrontata in dettaglio in
 sez.~\ref{sec:proc_memory}; abbiamo visto allora che il kernel provvede il
-meccanismo della memoria virtuale\index{memoria~virtuale} attraverso la
+meccanismo della \index{memoria~virtuale} memoria virtuale attraverso la
 divisione della memoria fisica in pagine.
 
 In genere tutto ciò è del tutto trasparente al singolo processo, ma in certi
 divisione della memoria fisica in pagine.
 
 In genere tutto ciò è del tutto trasparente al singolo processo, ma in certi
@@ -1622,7 +1625,7 @@ casi, come per l'I/O mappato in memoria (vedi sez.~\ref{sec:file_memory_map})
 che usa lo stesso meccanismo per accedere ai file, è necessario conoscere le
 dimensioni delle pagine usate dal kernel. Lo stesso vale quando si vuole
 gestire in maniera ottimale l'interazione della memoria che si sta allocando
 che usa lo stesso meccanismo per accedere ai file, è necessario conoscere le
 dimensioni delle pagine usate dal kernel. Lo stesso vale quando si vuole
 gestire in maniera ottimale l'interazione della memoria che si sta allocando
-con il meccanismo della paginazione\index{paginazione}.
+con il meccanismo della \index{paginazione} paginazione.
 
 Di solito la dimensione delle pagine di memoria è fissata dall'architettura
 hardware, per cui il suo valore di norma veniva mantenuto in una costante che
 
 Di solito la dimensione delle pagine di memoria è fissata dall'architettura
 hardware, per cui il suo valore di norma veniva mantenuto in una costante che
@@ -1695,20 +1698,20 @@ Il suo prototipo 
 \end{prototype}
 
 La funzione restituisce in ciascun elemento di \param{loadavg} il numero medio
 \end{prototype}
 
 La funzione restituisce in ciascun elemento di \param{loadavg} il numero medio
-di processi attivi sulla coda dello scheduler\itindex{scheduler}, calcolato su
-un diverso intervalli di tempo.  Il numero di intervalli che si vogliono
+di processi attivi sulla coda dello \itindex{scheduler} scheduler, calcolato
+su diversi intervalli di tempo.  Il numero di intervalli che si vogliono
 leggere è specificato da \param{nelem}, dato che nel caso di Linux il carico
 viene valutato solo su tre intervalli (corrispondenti a 1, 5 e 15 minuti),
 questo è anche il massimo valore che può essere assegnato a questo argomento.
 
 
 leggere è specificato da \param{nelem}, dato che nel caso di Linux il carico
 viene valutato solo su tre intervalli (corrispondenti a 1, 5 e 15 minuti),
 questo è anche il massimo valore che può essere assegnato a questo argomento.
 
 
-\subsection{La contabilità in stile BSD}
+\subsection{La \textsl{contabilità} in stile BSD}
 \label{sec:sys_bsd_accounting}
 
 \label{sec:sys_bsd_accounting}
 
-Una ultima modalità per monitorare l'uso delle risorse è quella, se si è
-compilato il kernel con il relativo supporto,\footnote{se cioè si è abilitata
-  l'opzione di compilazione \texttt{CONFIG\_BSD\_PROCESS\_ACCT}.} di attivare
-il cosiddetto \textit{BSD accounting}, che consente di registrare su file una
+Una ultima modalità per monitorare l'uso delle risorse è, se si è compilato il
+kernel con il relativo supporto,\footnote{se cioè si è abilitata l'opzione di
+  compilazione \texttt{CONFIG\_BSD\_PROCESS\_ACCT}.} quella di attivare il
+cosiddetto \textit{BSD accounting}, che consente di registrare su file una
 serie di informazioni\footnote{contenute nella struttura \texttt{acct}
   definita nel file \texttt{include/linux/acct.h} dei sorgenti del kernel.}
 riguardo alla \textsl{contabilità} delle risorse utilizzate da ogni processo
 serie di informazioni\footnote{contenute nella struttura \texttt{acct}
   definita nel file \texttt{include/linux/acct.h} dei sorgenti del kernel.}
 riguardo alla \textsl{contabilità} delle risorse utilizzate da ogni processo
@@ -1741,15 +1744,17 @@ contenuti nella stringa puntata da \param{filename}; la funzione richiede che
 il processo abbia i privilegi di amministratore (è necessaria la
 \itindex{capabilities} capability \const{CAP\_SYS\_PACCT}, vedi
 sez.~\ref{sec:proc_capabilities}). Se si specifica il valore \const{NULL} per
 il processo abbia i privilegi di amministratore (è necessaria la
 \itindex{capabilities} capability \const{CAP\_SYS\_PACCT}, vedi
 sez.~\ref{sec:proc_capabilities}). Se si specifica il valore \const{NULL} per
-\param{filename} il \textit{BSD accounting} viene invece disabilitato.
+\param{filename} il \textit{BSD accounting} viene invece disabilitato. Un
+semplice esempio per l'uso di questa funzione è riportato nel programma
+\texttt{AcctCtrl.c} dei sorgenti allegati alla guida.
 
 
-Quando si attiva la contabilità il file che si indica deve esistere; esso
+Quando si attiva la contabilità, il file che si indica deve esistere; esso
 verrà aperto in sola scrittura;\footnote{si applicano al pathname indicato da
   \param{filename} tutte le restrizioni viste in cap.~\ref{cha:file_intro}.}
 verrà aperto in sola scrittura;\footnote{si applicano al pathname indicato da
   \param{filename} tutte le restrizioni viste in cap.~\ref{cha:file_intro}.}
-le informazioni verranno registrate in \textit{append} in coda al file tutte
-le volte che un processo termina. Le informazioni vengono salvate in formato
-binario, e corrispondono al contenuto della apposita struttura dati definita
-all'interno del kernel.
+le informazioni verranno registrate in \itindex{append~mode} \textit{append}
+in coda al file tutte le volte che un processo termina. Le informazioni
+vengono salvate in formato binario, e corrispondono al contenuto della
+apposita struttura dati definita all'interno del kernel.
 
 Il funzionamento di \func{acct} viene inoltre modificato da uno specifico
 parametro di sistema, modificabile attraverso \file{/proc/sys/kernel/acct} (o
 
 Il funzionamento di \func{acct} viene inoltre modificato da uno specifico
 parametro di sistema, modificabile attraverso \file{/proc/sys/kernel/acct} (o
@@ -1818,7 +1823,7 @@ mantenuto dal sistema e non 
 dall'orologio hardware del calcolatore.
 
 Anche il \itindex{process~time} \textit{process time} di solito si esprime in
 dall'orologio hardware del calcolatore.
 
 Anche il \itindex{process~time} \textit{process time} di solito si esprime in
-secondi, ma provvede una precisione ovviamente superiore al \textit{calendar
+secondi, ma fornisce una precisione ovviamente superiore al \textit{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:
   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:
@@ -1919,8 +1924,8 @@ 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 processo figlio termina prima di ricevere
 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 processo figlio termina prima di ricevere
-lo stato di terminazione di tutti i suoi figli, questi processi ``nipoti'' non
-verranno considerati nel calcolo di questi tempi.
+lo stato di terminazione di tutti i suoi figli, questi processi
+``\textsl{nipoti}'' non verranno considerati nel calcolo di questi tempi.
 
 \itindend{process~time}
 
 
 \itindend{process~time}
 
@@ -2250,7 +2255,7 @@ e impostano anche la variabile \var{tzname} con l'informazione della
 \textit{time zone} corrente; \func{ctime} è banalmente definita in termini di
 \func{asctime} come \code{asctime(localtime(t)}. Dato che l'uso di una stringa
 statica rende le funzioni non rientranti POSIX.1c e SUSv2 prevedono due
 \textit{time zone} corrente; \func{ctime} è banalmente definita in termini di
 \func{asctime} come \code{asctime(localtime(t)}. Dato che l'uso di una stringa
 statica rende le funzioni non rientranti POSIX.1c e SUSv2 prevedono due
-sostitute rientranti, il cui nome è al solito ottenuto appendendo un
+sostitute rientranti, il cui nome è al solito ottenuto aggiungendo un
 \code{\_r}, che prendono un secondo argomento \code{char *buf}, in cui
 l'utente deve specificare il buffer su cui la stringa deve essere copiata
 (deve essere di almeno 26 caratteri).
 \code{\_r}, che prendono un secondo argomento \code{char *buf}, in cui
 l'utente deve specificare il buffer su cui la stringa deve essere copiata
 (deve essere di almeno 26 caratteri).
@@ -2632,3 +2637,51 @@ che errori relativi alla stessa linea non vengano ripetuti.
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
+
+% LocalWords:  filesystem like kernel saved header limits sysconf sez tab float
+% LocalWords:  FOPEN stdio MB LEN CHAR char UCHAR unsigned SCHAR MIN signed INT
+% LocalWords:  SHRT short USHRT int UINT LONG long ULONG LLONG ULLONG POSIX ARG
+% LocalWords:  Stevens exec CHILD STREAM stream TZNAME timezone NGROUPS SSIZE
+% LocalWords:  ssize LISTIO JOB CONTROL job control IDS VERSION YYYYMML bits bc
+% LocalWords:  dall'header posix lim nell'header glibc run unistd name errno SC
+% LocalWords:  NGROUP CLK TCK clock tick process PATH pathname BUF CANON path
+% LocalWords:  pathconf fpathconf descriptor fd uname sys struct utsname info
+% LocalWords:  EFAULT fig SOURCE NUL LENGTH DOMAIN NMLN UTSLEN system call proc
+% LocalWords:  domainname sysctl BSD nlen void oldval size oldlenp newval EPERM
+% LocalWords:  newlen ENOTDIR EINVAL ENOMEM linux l'array oldvalue paging stack
+% LocalWords:  TCP shell Documentation ostype hostname osrelease version mount
+% LocalWords:  const source filesystemtype mountflags ENODEV ENOTBLK block read
+% LocalWords:  device EBUSY only superblock point EACCES NODEV ENXIO major xC
+% LocalWords:  number EMFILE dummy ENAMETOOLONG ENOENT ELOOP virtual devfs MGC
+% LocalWords:  magic MSK RDONLY NOSUID suid sgid NOEXEC SYNCHRONOUS REMOUNT MNT
+% LocalWords:  MANDLOCK mandatory locking WRITE APPEND append IMMUTABLE NOATIME
+% LocalWords:  access NODIRATIME BIND MOVE umount flags FORCE statfs fstatfs ut
+% LocalWords:  buf ENOSYS EIO EBADF type fstab mntent home shadow username uid
+% LocalWords:  passwd PAM Pluggable Authentication Method Service Switch pwd ru
+% LocalWords:  getpwuid getpwnam NULL buflen result ERANGE getgrnam getgrgid AS
+% LocalWords:  grp group gid SVID fgetpwent putpwent getpwent setpwent endpwent
+% LocalWords:  fgetgrent putgrent getgrent setgrent endgrent accounting init HZ
+% LocalWords:  runlevel Hierarchy logout setutent endutent utmpname utmp paths
+% LocalWords:  WTMP getutent getutid getutline pututline LVL OLD DEAD EMPTY dev
+% LocalWords:  line libc XPG utmpx getutxent getutxid getutxline pututxline who
+% LocalWords:  setutxent endutxent wmtp updwtmp logwtmp wtmp host rusage utime
+% LocalWords:  minflt majflt nswap fault swap timeval wait getrusage usage SELF
+% LocalWords:  CHILDREN current limit soft RLIMIT Address brk mremap mmap dump
+% LocalWords:  SIGSEGV SIGXCPU SIGKILL sbrk FSIZE SIGXFSZ EFBIG LOCKS lock dup
+% LocalWords:  MEMLOCK NOFILE NPROC fork EAGAIN SIGPENDING sigqueue kill RSS tv
+% LocalWords:  resource getrlimit setrlimit rlimit rlim INFINITY capabilities
+% LocalWords:  capability CAP l'I Sun Sparc PAGESIZE getpagesize SVr SUSv get
+% LocalWords:  phys pages avphys NPROCESSORS CONF ONLN getloadavg stdlib double
+% LocalWords:  loadavg nelem scheduler CONFIG ACCT acct filename EACCESS EUSER
+% LocalWords:  ENFILE EROFS PACCT AcctCtrl cap calendar UTC Jan the Epoch GMT
+% LocalWords:  Greenwich Mean l'UTC timer CLOCKS SEC cron wall elapsed times tz
+% LocalWords:  tms dell' cutime cstime waitpid gettimeofday settimeofday timex
+% LocalWords:  timespec adjtime olddelta adjtimex David Mills nell' RFC NTP ntp
+% LocalWords:  nell'RFC ADJ FREQUENCY frequency MAXERROR maxerror ESTERROR PLL
+% LocalWords:  esterror TIMECONST constant SINGLESHOT MOD INS insert leap OOP
+% LocalWords:  second delete progress has occurred BAD broken tm gmtoff asctime
+% LocalWords:  ctime timep gmtime localtime mktime tzname tzset daylight format
+% LocalWords:  strftime thread EOF modifiable lvalue app errcode strerror LC at
+% LocalWords:  perror string errnum MESSAGES error message ErrCode strtol log
+% LocalWords:  program invocation argv printf print progname exit count fname
+% LocalWords:  lineno one  standardese Di