Aggiunta figura sullo schema del kernel per il file locking
[gapil.git] / system.tex
index 2422abdc7db8caf52ac807b986140d74311de700..c474854e8924c5c96d5244e898a14fdd93fd7bed 100644 (file)
@@ -10,7 +10,7 @@ e degli errori.
 
 
 
-\section{La lettura delle caratteristiche del sistema}
+\section{Capacità e caratteristiche del sistema}
 \label{sec:sys_characteristics}
 
 In questa sezione tratteremo le varie modalità con cui un programma può
@@ -21,11 +21,11 @@ l'architettura hardware, l'implementazione del kernel e delle librerie, le
 opzioni di configurazione.
 
 La definizione di queste caratteristiche ed il tentativo di provvedere dei
-meccanismi generali che i programmi potessero usare per ricavarle è uno degli
+meccanismi generali che i programmi possono usare per ricavarle è uno degli
 aspetti più complessi e controversi con cui le diverse standardizzazioni si
 sono dovute confrontare, spesso con risultati spesso tutt'altro che chiari.
-Proveremo comunque a dare una descrizione dei principali metodi previsti dai
-vari standard per ricavare sia le caratteristiche specifiche del sistema, che
+Daremo comunque una descrizione dei principali metodi previsti dai vari
+standard per ricavare sia le caratteristiche specifiche del sistema, che
 quelle della gestione dei file.
 
 
@@ -241,7 +241,7 @@ valori ottenuti da \func{sysconf}.
     \hline
     \macro{\_POSIX\_JOB\_CONTROL}& il sistema supporta il 
                                    \textit{job control} (vedi 
-                                   \secref{sec:sess_xxx}).\\
+                                   \secref{sec:sess_job_control}).\\
     \macro{\_POSIX\_SAVED\_IDS}  & il sistema supporta gli identificatori del 
                                    gruppo \textit{saved} (vedi 
                                    \secref{sec:proc_access_id})
@@ -332,7 +332,7 @@ relative spiegazioni, si pu
       \textit{process time} (vedi \secref{sec:sys_unix_time}).\\
       \texttt{\_SC\_JOB\_CONTROL}&\macro{\_POSIX\_JOB\_CONTROL}&
       Indica se è supportato il \textit{job control} (vedi
-      \secref{sec:sess_xxx}) in stile POSIX.\\
+      \secref{sec:sess_job_control}) in stile POSIX.\\
       \texttt{\_SC\_SAVED\_IDS}&\macro{\_POSIX\_SAVED\_IDS}&
       Indica se il sistema supporta i \textit{saved id} (vedi
       \secref{sec:proc_access_id}).\\ 
@@ -388,19 +388,20 @@ riportate in \tabref{tab:sys_file_macro}.
 \begin{table}[htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|r|p{8cm}|}
+  \begin{tabular}[c]{|l|r|l|}
     \hline
     \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline                
-    \macro{NAME\_MAX}&  14  & lunghezza in byte di un nome di file. \\
-    \macro{PATH\_MAX}& 256  & lunghezza in byte di pathname.\\
-    \macro{PIPE\_BUF}&4096  & byte scrivibili atomicamente in una pipe\\
     \macro{LINK\_MAX}   &8  & numero massimo di link a un file\\
-    \macro{MAX\_CANON}&255  & spazio disponibile nella coda di input
-                              canonica del terminale\\
+    \macro{NAME\_MAX}&  14  & lunghezza in byte di un nome di file. \\
+    \macro{PATH\_MAX}& 256  & lunghezza in byte di un pathname.\\
+    \macro{PIPE\_BUF}&4096  & byte scrivibili atomicamente in una pipe
+                              (vedi \secref{sec:ipc_pipes}).\\
+    \macro{MAX\_CANON}&255  & dimensione di una riga di terminale in modo 
+                              canonico (vedi \secref{sec:term_design}).\\
     \macro{MAX\_INPUT}&255  & spazio disponibile nella coda di input 
-                              del terminale\\
+                              del terminale (vedi \secref{sec:term_design}).\\
     \hline                
   \end{tabular}
   \caption{Macro per i limiti sulle caratteristiche dei file.}
@@ -416,21 +417,20 @@ analoghe di \tabref{tab:sys_posix1_general}.
 \begin{table}[htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|r|p{8cm}|}
+  \begin{tabular}[c]{|l|r|l|}
     \hline
     \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
-    \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\
-    \macro{\_POSIX\_LINK\_MAX}   &8  & numero massimo di link a un file\\
-    \macro{\_POSIX\_MAX\_CANON}&255  & spazio disponibile nella coda di input
-                                       canonica del terminale\\
-    \macro{\_POSIX\_MAX\_INPUT}&255  & spazio disponibile nella coda di input 
-                                       del terminale\\
+    \macro{\_POSIX\_LINK\_MAX}   &8  & numero massimo di link a un file.\\
     \macro{\_POSIX\_NAME\_MAX}&  14  & lunghezza in byte di un nome di file. \\
-    \macro{\_POSIX\_PATH\_MAX}& 256  & lunghezza in byte di pathname.\\
+    \macro{\_POSIX\_PATH\_MAX}& 256  & lunghezza in byte di un pathname.\\
     \macro{\_POSIX\_PIPE\_BUF}& 512  & byte scrivibili atomicamente in una
-                                       pipe\\
+                                       pipe.\\
+    \macro{\_POSIX\_MAX\_CANON}&255  & dimensione di una riga di
+                                       terminale in modo canonico.\\
+    \macro{\_POSIX\_MAX\_INPUT}&255  & spazio disponibile nella coda di input 
+                                       del terminale.\\
 %    \macro{\_POSIX\_MQ\_OPEN\_MAX}&  8& \\
 %    \macro{\_POSIX\_MQ\_PRIO\_MAX}& 32& \\
 %    \macro{\_POSIX\_FD\_SETSIZE}& 16 & \\
@@ -488,7 +488,7 @@ suo prototipo 
   Restituisce informazioni sul sistema nella struttura \param{info}.
   
   \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di
-  fallimento, nel qual caso \var{errno} viene impostata a \macro{EFAULT}.}
+    fallimento, nel qual caso \var{errno} assumerà il valore \macro{EFAULT}.}
 \end{prototype}
 
 La funzione, che viene usata dal comando \cmd{uname}, restituisce le
@@ -569,23 +569,21 @@ sistema 
 l'implementazione è specifica di Linux; il suo prototipo è:
 \begin{functions}
 \headdecl{unistd.h}
-\headdecl{linux/unistd.h}
-\headdecl{linux/sysctl.h}
 \funcdecl{int sysctl(int *name, int nlen, void *oldval, size\_t *oldlenp, void
   *newval, size\_t newlen)}
 
 Legge o scrive uno dei parametri di sistema.
 
 \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
-  errore, nel qual caso \var{errno} viene impostata ai valori:
+  errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\macro{EPERM}] il processo non ha il permesso di accedere ad uno dei
-    componenti nel cammino specificato per il parametro, o non ha il permesso
-    di accesso al parametro nella modalità scelta.
+  \item[\macro{EPERM}] non si ha il permesso di accedere ad uno dei componenti
+    nel cammino specificato per il parametro, o di accedere al parametro nella
+    modalità scelta.
   \item[\macro{ENOTDIR}] non esiste un parametro corrispondente al nome
     \param{name}.
-  \item[\macro{EFAULT}] si è specificato \param{oldlenp} zero quando
-    \param{oldval} è non nullo. 
+%  \item[\macro{EFAULT}] si è specificato \param{oldlenp} zero quando
+%    \param{oldval} è non nullo. 
   \item[\macro{EINVAL}] o si è specificato un valore non valido per il
     parametro che si vuole impostare o lo spazio provvisto per il ritorno di un
     valore non è delle giuste dimensioni.
@@ -593,14 +591,19 @@ Legge o scrive uno dei parametri di sistema.
     quando non si è specificato sufficiente spazio per ricevere il valore di un
     parametro.
   \end{errlist}
+  ed inoltre \macro{EFAULT}.
 }
 \end{functions}
 
 I parametri a cui la funzione permettere di accedere sono organizzati in
-maniera gerarchica all'interno un albero; 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 pathname (da cui l'uso alternativo del
-filesystem \file{/proc}, che vedremo dopo).
+maniera gerarchica all'interno un albero;\footnote{si tenga presente che
+  includendo solo \file{unistd.h}, saranno definiti solo i parametri generici;
+  dato che ce ne sono molti specifici dell'implementazione, nel caso di Linux
+  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 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
 arriva ad identificare un parametro specifico è passato alla funzione
@@ -752,7 +755,7 @@ significativi sono un \textit{magic number}\footnote{cio
   riservata al \textit{magic number}.} mentre i 16 meno significativi sono
 usati per specificare le opzioni; essi sono usati come maschera binaria e
 vanno impostati con un OR aritmetico della costante \macro{MS\_MGC\_VAL} con i
-valori riportati in \ntab.
+valori riportati in \tabref{tab:sys_mount_flags}.
 
 \begin{table}[htb]
   \footnotesize
@@ -806,7 +809,7 @@ Una volta che non si voglia pi
   Smonta il filesystem montato sulla directory \param{target}.
   
   \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di
-    fallimento, nel qual caso \var{errno} viene impostata a:
+    fallimento, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\macro{EPERM}] il processo non ha i privilegi di amministratore.
   \item[\macro{EBUSY}]  \param{target} è la directory di lavoro di qualche
@@ -861,7 +864,7 @@ informazioni riguardo al filesystem su cui si trova un certo file, sono
   posto il file specificato.
   
   \bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di
-    errore, nel qual caso \var{errno} viene impostata ai valori:
+    errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\macro{ENOSYS}] il filesystem su cui si trova il file specificato non
   supporta la funzione.
@@ -1490,7 +1493,7 @@ sono:
   Imposta il limite per la risorsa \param{resource}.
   
   \bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di
-    errore, nel qual caso \var{errno} viene impostata ai valori:
+    errore, nel qual caso \var{errno} assumerà uno dei valori:
     \begin{errlist}
     \item[\macro{EINVAL}] I valori per \param{resource} non sono validi.
     \item[\macro{EPERM}] Un processo senza i privilegi di amministratore ha
@@ -1868,7 +1871,7 @@ sono:
   Imposta il tempo di sistema.
   
   \bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in
-    caso di errore, nel qual caso \var{errno} può assumere il valori
+    caso di errore, nel qual caso \var{errno} può assumere i valori
     \macro{EINVAL} \macro{EFAULT} e per \func{settimeofday} anche
     \macro{EPERM}.}
 \end{functions}
@@ -2372,8 +2375,8 @@ prima funzione che si pu
   
   \bodydesc{La funzione ritorna il puntatore alla stringa col messaggio di
     errore in caso di successo e \macro{NULL} in caso di errore, nel qual caso
-    \var{errno} sarà impostata a \macro{EINVAL} se si è specificato un numero di
-    errore non valido.}
+    \var{errno} assumerà il valore \macro{EINVAL} se si è specificato un
+    numero di errore non valido.}
 \end{prototype}
 
 In generale \func{strerror} viene usata passando \var{errno} come parametro;