Varie correzioni, completata revisione capitolo sull'I/O su file
[gapil.git] / system.tex
index bd60d40fb574b7261ae83d92750ec402e9c835e3..84dad32d73be5035e83741fbb7dc9fd75fca43e2 100644 (file)
@@ -32,14 +32,14 @@ l'implementazione del kernel e delle librerie, le opzioni di
 configurazione. Il kernel inoltre mette a disposizione l'accesso ad alcuni
 parametri che possono modificarne il comportamento.
 
 configurazione. Il kernel inoltre mette a disposizione l'accesso ad alcuni
 parametri che possono modificarne il comportamento.
 
-La definizione di queste caratteristiche ed il tentativo di provvedere dei
+La definizione di queste caratteristiche ed il tentativo di fornire dei
 meccanismi generali che i programmi possono usare per ricavarle è uno degli
 aspetti più complessi e controversi con cui le diverse standardizzazioni si
 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.
-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 e prenderemo in esame le modalità con cui è
-possibile intervenire sui parametri del kernel.
+sono dovute confrontare, con risultati spesso tutt'altro che chiari.  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, e prenderemo in esame le modalità con cui è possibile
+intervenire sui parametri del kernel.
 
 \subsection{Limiti e caratteristiche del sistema}
 \label{sec:sys_limits}
 
 \subsection{Limiti e caratteristiche del sistema}
 \label{sec:sys_limits}
@@ -58,16 +58,17 @@ sono necessari due tipi diversi di funzionalità:
 \item la possibilità di determinare limiti ed opzioni durante l'esecuzione.
 \end{itemize*}
 
 \item la possibilità di determinare limiti ed opzioni durante l'esecuzione.
 \end{itemize*}
 
-La prima funzionalità si può ottenere includendo gli opportuni header file che
-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 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
-\headfile{limits.h}, se invece possono variare, il loro valore sarà ottenibile
-tramite la funzione \func{sysconf} (che esamineremo a breve).
+La prima funzionalità si può ottenere includendo gli opportuni file di
+intestazione che 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 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 \headfile{limits.h}, se invece possono variare, il loro
+valore sarà ottenibile tramite la funzione \func{sysconf} (che esamineremo a
+breve).
 
 \begin{table}[htb]
   \centering
 
 \begin{table}[htb]
   \centering
@@ -151,7 +152,7 @@ sez.~\ref{sec:sys_file_limits}.
 \begin{table}[htb]
   \centering
   \footnotesize
 \begin{table}[htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|r|p{8cm}|}
+  \begin{tabular}[c]{|l|r|p{9cm}|}
     \hline
     \textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
     \textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\
     \hline
@@ -187,7 +188,7 @@ file, riportate in tab.~\ref{tab:sys_file_macro}.
 \begin{table}[htb]
   \centering
   \footnotesize
 \begin{table}[htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|r|p{8cm}|}
+  \begin{tabular}[c]{|l|r|p{9cm}|}
     \hline
     \textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
     \textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\
     \hline
@@ -247,7 +248,7 @@ valori ottenuti da \func{sysconf}.
 \begin{table}[htb]
   \centering
   \footnotesize
 \begin{table}[htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|p{8cm}|}
+  \begin{tabular}[c]{|l|p{9cm}|}
     \hline
     \textbf{Macro}&\textbf{Significato}\\
     \hline
     \hline
     \textbf{Macro}&\textbf{Significato}\\
     \hline
@@ -370,12 +371,12 @@ relative spiegazioni, si può trovare nel manuale della \acr{glibc}.
 \end{table}
 
 In generale ogni limite o caratteristica del sistema per cui è definita una
 \end{table}
 
 In generale ogni limite o caratteristica del sistema per cui è definita una
-macro, sia dagli standard ANSI C e ISO C90, che da POSIX.1 e POSIX.2, può
-essere ottenuto attraverso una chiamata a \func{sysconf}. Il nome della
-costante da utilizzare come valore dell'argomento \param{name} si otterrà
-aggiungendo \code{\_SC\_} ai nomi delle costanti definite dai primi due
-standard (quelle di tab.~\ref{tab:sys_generic_macro}), o sostituendolo a
-\code{\_POSIX\_} per le costanti definite dagli altri due standard (quelle di
+macro, sia da ANSI C e ISO C90 che da POSIX.1 e POSIX.2, può essere ottenuto
+attraverso una chiamata a \func{sysconf}. Il nome della costante da utilizzare
+come valore dell'argomento \param{name} si otterrà aggiungendo \code{\_SC\_}
+ai nomi delle costanti definite dai primi due standard (quelle di
+tab.~\ref{tab:sys_generic_macro}), o sostituendolo a \code{\_POSIX\_} per le
+costanti definite dagli altri due standard (quelle di
 tab.~\ref{tab:sys_posix1_general}).
 
 In linea teorica si dovrebbe fare uso di \func{sysconf} solo quando la
 tab.~\ref{tab:sys_posix1_general}).
 
 In linea teorica si dovrebbe fare uso di \func{sysconf} solo quando la
@@ -516,8 +517,10 @@ BSD4.4 ed introdotta su Linux a partire dal kernel 1.3.57, ma oggi il suo uso
 esistere, ma non dispone più di una interfaccia nella \acr{glibc} ed il suo
 utilizzo può essere effettuato solo tramite \func{syscall}, ma di nuovo questo
 viene sconsigliato in quanto la funzionalità non è più mantenuta e molto
 esistere, ma non dispone più di una interfaccia nella \acr{glibc} ed il suo
 utilizzo può essere effettuato solo tramite \func{syscall}, ma di nuovo questo
 viene sconsigliato in quanto la funzionalità non è più mantenuta e molto
-probabilmente sarà rimossa nel prossimo futuro. Per questo motivo eviteremo di
-trattarne i particolari.
+probabilmente sarà rimossa nel prossimo futuro.\footnote{a partire dal kernel
+  2.6.34 la funzione viene inserita nella compilazione del kernel previa
+  esplicita richiesta, ed il suo uso produce avvertimenti nei log del kernel.}
+Per questo motivo eviteremo di trattarne i particolari.
 
 Lo scopo di \funcm{sysctl} era quello di fornire ai programmi una modalità per
 modificare i parametri di sistema. Questi erano organizzati in maniera
 
 Lo scopo di \funcm{sysctl} era quello di fornire ai programmi una modalità per
 modificare i parametri di sistema. Questi erano organizzati in maniera
@@ -531,33 +534,36 @@ moduli che sono stati caricati nel sistema. Inoltre non essendo standardizzati
 i loro nomi possono variare da una versione di kernel all'altra, alcuni esempi
 di questi parametri sono:
 \begin{itemize*}
 i loro nomi possono variare da una versione di kernel all'altra, alcuni esempi
 di questi parametri sono:
 \begin{itemize*}
-\item il nome di dominio
-\item i parametri del meccanismo di \textit{paging}.
-\item il filesystem montato come radice
-\item la data di compilazione del kernel
-\item i parametri dello stack TCP
-\item il numero massimo di file aperti
+\item il nome di dominio,
+\item i parametri del meccanismo di \textit{paging},
+\item il filesystem montato come radice,
+\item la data di compilazione del kernel,
+\item i parametri dello stack TCP,
+\item il numero massimo di file aperti,
+\item il numero massimo di processi,
+\item i parametri del \textit{SystemV IPC} (vedi sez.~\ref{sec:ipc_sysv}).
 \end{itemize*}
 \end{itemize*}
-
-
+%\noindent e molti altri che abbiamo già incontrato 
 
 \index{file!filesystem~\texttt  {/proc}!definizione|(}
 
 Dato che fin dall'inizio i parametri erano organizzati in una struttura
 
 \index{file!filesystem~\texttt  {/proc}!definizione|(}
 
 Dato che fin dall'inizio i parametri erano organizzati in una struttura
-albero, è parso naturale rimappare questa organizzazione utilizzando il
-filesystem \file{/proc}. Questo è un filesystem completamente virtuale, il cui
-contenuto è generato direttamente dal kernel, che non fa riferimento a nessun
-dispositivo fisico, ma presenta in forma di file e directory i dati di alcune
-delle strutture interne del kernel stesso. Il suo utilizzo principale, come
-denuncia il nome stesso, è quello di fornire una interfaccia per ottenere i
-dati relativi ai processi (venne introdotto a questo scopo su BSD), ma nel
-corso del tempo il suo uso è stato ampliato.
+albero, è parso naturale riportare questa organizzazione all'interno del
+filesystem \file{/proc}. Questo è un filesystem virtuale il cui contenuto è
+generato direttamente dal kernel, che non fa riferimento a nessun dispositivo
+fisico, ma presenta in forma di file e directory i dati di alcune delle
+strutture interne del kernel. Il suo utilizzo principale, come denuncia il
+nome stesso, è quello di fornire una interfaccia per ottenere i dati relativi
+ai processi (venne introdotto a questo scopo su BSD), ma nel corso del tempo
+il suo uso è stato ampliato.
 
 All'interno di questo filesystem sono pertanto presenti una serie di file che
 riflettono il contenuto dei parametri del kernel (molti dei quali accessibili
 in sola lettura) e in altrettante directory, nominate secondo il relativo
 \ids{PID}, vengono mantenute le informazioni relative a ciascun processo
 
 All'interno di questo filesystem sono pertanto presenti una serie di file che
 riflettono il contenuto dei parametri del kernel (molti dei quali accessibili
 in sola lettura) e in altrettante directory, nominate secondo il relativo
 \ids{PID}, vengono mantenute le informazioni relative a ciascun processo
-attivo nel sistema.
+attivo nel sistema (abbiamo già incontrato questa caratteristica in
+sez.~\ref{sec:file_openat} per accedere ai filedescriptor del processo
+stesso).
 
 In particolare l'albero dei valori dei parametri di sistema impostabili con
 \func{sysctl} viene presentato in forma di una gerarchia di file e directory a
 
 In particolare l'albero dei valori dei parametri di sistema impostabili con
 \func{sysctl} viene presentato in forma di una gerarchia di file e directory a
@@ -579,8 +585,8 @@ l'accesso, con altrettante corrispondenze ai file presenti in
 ma vista la assoluta naturalità dell'interfaccia, e la sua maggiore
 efficienza, nelle versioni più recenti del kernel questa è diventata la
 modalità canonica per modificare i parametri del kernel, evitando di dover
 ma vista la assoluta naturalità dell'interfaccia, e la sua maggiore
 efficienza, nelle versioni più recenti del kernel questa è diventata la
 modalità canonica per modificare i parametri del kernel, evitando di dover
-ricorrere all'uso di una \textit{system call} specifica che pur essendo ancora
-presente, prima o poi verrà eliminata.
+ricorrere all'uso di una \textit{system call} specifica, che pur essendo
+ancora presente prima o poi verrà eliminata.
 
 Nonostante la semplificazione nella gestione ottenuta con l'uso di
 \file{/proc/sys} resta il problema generale di conoscere il significato di
 
 Nonostante la semplificazione nella gestione ottenuta con l'uso di
 \file{/proc/sys} resta il problema generale di conoscere il significato di
@@ -661,8 +667,6 @@ trovano sotto la directory \file{/proc/sys/kernel/}.
 
 \index{file!filesystem~\texttt  {/proc}!definizione|)}
 
 
 \index{file!filesystem~\texttt  {/proc}!definizione|)}
 
-
-
 \section{La gestione del sistema}
 \label{sec:sys_management}
 
 \section{La gestione del sistema}
 \label{sec:sys_management}
 
@@ -681,11 +685,11 @@ Tradizionalmente le informazioni utilizzate nella gestione di utenti e gruppi
 directory, ecc.)  venivano registrate all'interno dei due file di testo
 \conffiled{/etc/passwd} ed \conffiled{/etc/group}, il cui formato è descritto
 dalle relative pagine del manuale\footnote{nella quinta sezione, quella dei
 directory, ecc.)  venivano registrate all'interno dei due file di testo
 \conffiled{/etc/passwd} ed \conffiled{/etc/group}, il cui formato è descritto
 dalle relative pagine del manuale\footnote{nella quinta sezione, quella dei
-  file di configurazione (esistono comandi corrispondenti), una trattazione
-  sistemistica dell'intero argomento coperto in questa sezione si consulti
-  sez.~4.3 di \cite{AGL}.} e tutte le funzioni che richiedevano l'accesso a
-queste informazione andavano a leggere direttamente il contenuto di questi
-file.
+  file di configurazione, dato che esistono comandi corrispondenti; per una
+  trattazione sistemistica dell'intero argomento coperto in questa sezione si
+  consulti sez.~4.3 di \cite{AGL}.} e tutte le funzioni che richiedevano
+l'accesso a queste informazione andavano a leggere direttamente il contenuto
+di questi file.
 
 In realtà oltre a questi due file da molto tempo gran parte dei sistemi
 unix-like usano il cosiddetto sistema delle \textit{shadow password} che
 
 In realtà oltre a questi due file da molto tempo gran parte dei sistemi
 unix-like usano il cosiddetto sistema delle \textit{shadow password} che
@@ -701,26 +705,29 @@ la maggior parte delle distribuzioni di GNU/Linux usa la libreria PAM (sigla
 che sta per \textit{Pluggable Authentication Method}) che fornisce una
 interfaccia comune per i processi di autenticazione, svincolando completamente
 le singole applicazioni dai dettagli del come questa viene eseguita e di dove
 che sta per \textit{Pluggable Authentication Method}) che fornisce una
 interfaccia comune per i processi di autenticazione, svincolando completamente
 le singole applicazioni dai dettagli del come questa viene eseguita e di dove
-vengono mantenuti i dati relativi. Si tratta di un sistema modulare, in cui è
-possibile utilizzare anche più meccanismi insieme, diventa così possibile
-avere vari sistemi di riconoscimento (biometria, chiavi hardware, ecc.),
-diversi formati per le password e diversi supporti per le informazioni. Il
-tutto avviene in maniera trasparente per le applicazioni purché per ciascun
-meccanismo si disponga della opportuna libreria che implementa l'interfaccia
-di PAM.
+vengono mantenuti i dati relativi.
+
+Si tratta  di un  sistema modulare,  in cui è  possibile utilizzare  anche più
+meccanismi   insieme,   diventa  così   possibile   avere   vari  sistemi   di
+riconoscimento  (biometria, chiavi  hardware,  ecc.), diversi  formati per  le
+password e diversi  supporti per le informazioni. Il tutto  avviene in maniera
+trasparente  per le  applicazioni purché  per ciascun  meccanismo si  disponga
+della opportuna libreria che implementa l'interfaccia di PAM.
 
 Dall'altra parte, il diffondersi delle reti e la necessità di centralizzare le
 informazioni degli utenti e dei gruppi per insiemi di macchine e servizi
 all'interno di una stessa organizzazione, in modo da mantenere coerenti i
 dati, ha portato anche alla necessità di poter recuperare e memorizzare dette
 informazioni su supporti diversi dai file citati, introducendo il sistema del
 
 Dall'altra parte, il diffondersi delle reti e la necessità di centralizzare le
 informazioni degli utenti e dei gruppi per insiemi di macchine e servizi
 all'interno di una stessa organizzazione, in modo da mantenere coerenti i
 dati, ha portato anche alla necessità di poter recuperare e memorizzare dette
 informazioni su supporti diversi dai file citati, introducendo il sistema del
-\textit{Name Service Switch} (che tratteremo brevemente in
-sez.~\ref{sec:sock_resolver}) dato che la sua applicazione è cruciale nella
+\textit{Name Service Switch}che tratteremo brevemente in
+sez.~\ref{sec:sock_resolver} dato che la sua applicazione è cruciale nella
 procedura di risoluzione di nomi di rete.
 
 In questo paragrafo ci limiteremo comunque a trattare le funzioni classiche
 per la lettura delle informazioni relative a utenti e gruppi tralasciando
 procedura di risoluzione di nomi di rete.
 
 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. 
+completamente quelle relative all'autenticazione.\footnote{la cui
+  programmazione ormai attiene all'uso dell'interfaccia di PAM, che va al di
+  la dello scopo di questo testo.}
 %  Per questo non tratteremo
 % affatto l'interfaccia di PAM, ma approfondiremo invece il sistema del
 % \textit{Name Service Switch}, un meccanismo messo a disposizione dalla
 %  Per questo non tratteremo
 % affatto l'interfaccia di PAM, ma approfondiremo invece il sistema del
 % \textit{Name Service Switch}, un meccanismo messo a disposizione dalla
@@ -814,7 +821,7 @@ illustrato in sez.~\ref{sec:sys_errno}) per cui se lo si vuole utilizzare è
 opportuno inizializzarlo a zero prima di invocare le funzioni per essere
 sicuri di non avere un residuo di errore da una chiamata precedente. Il non
 aver trovato l'utente richiesto infatti può essere dovuto a diversi motivi (a
 opportuno inizializzarlo a zero prima di invocare le funzioni per essere
 sicuri di non avere un residuo di errore da una chiamata precedente. Il non
 aver trovato l'utente richiesto infatti può essere dovuto a diversi motivi (a
-partire dal fatto che non esista) per cui si possono ottenere i valori di
+partire dal fatto che non esista) per cui si possono ottenere i codici di
 errore più vari a seconda dei casi.
 
 Del tutto analoghe alle precedenti sono le funzioni \funcd{getgrnam} e
 errore più vari a seconda dei casi.
 
 Del tutto analoghe alle precedenti sono le funzioni \funcd{getgrnam} e
@@ -970,15 +977,15 @@ informazioni sono descritte in dettaglio nel manuale della \acr{glibc}.
 
 Questi file non devono mai essere letti direttamente, ma le informazioni che
 contengono possono essere ricavate attraverso le opportune funzioni di
 
 Questi file non devono mai essere letti direttamente, ma le informazioni che
 contengono possono essere ricavate attraverso le opportune funzioni di
-libreria. Queste sono analoghe alle precedenti funzioni (vedi
-tab.~\ref{tab:sys_passwd_func}) usate per accedere al registro degli utenti,
-solo che in questo caso la struttura del registro della \textsl{contabilità} è
-molto più complessa, dato che contiene diversi tipi di informazione.
+libreria. Queste sono analoghe alle precedenti funzioni usate per accedere al
+registro degli utenti (vedi tab.~\ref{tab:sys_passwd_func}), solo che in
+questo caso la struttura del registro della \textsl{contabilità} è molto più
+complessa, dato che contiene diversi tipi di informazione.
 
 Le prime tre funzioni, \funcd{setutent}, \funcd{endutent} e \funcd{utmpname}
 servono rispettivamente a aprire e a chiudere il file che contiene il registro
 della \textsl{contabilità} degli, e a specificare su quale file esso viene
 
 Le prime tre funzioni, \funcd{setutent}, \funcd{endutent} e \funcd{utmpname}
 servono rispettivamente a aprire e a chiudere il file che contiene il registro
 della \textsl{contabilità} degli, e a specificare su quale file esso viene
-mantenuto. I loro prototipi sono:
+mantenuto; i loro prototipi sono:
 
 \begin{funcproto}{
 \fhead{utmp.h} 
 
 \begin{funcproto}{
 \fhead{utmp.h} 
@@ -3270,7 +3277,7 @@ che errori relativi alla stessa linea non vengano ripetuti.
 % LocalWords:  memory mlockall MAP LOCKED shmctl MSGQUEUE attr NICE nice MADV
 % LocalWords:  madvise WILLNEED RTPRIO sched setscheduler setparam scheduling
 % LocalWords:  RTTIME execve kb prlimit pid new old ESRCH EUSERS refresh high
 % LocalWords:  memory mlockall MAP LOCKED shmctl MSGQUEUE attr NICE nice MADV
 % LocalWords:  madvise WILLNEED RTPRIO sched setscheduler setparam scheduling
 % LocalWords:  RTTIME execve kb prlimit pid new old ESRCH EUSERS refresh high
-% LocalWords:  resolution HRT jiffies strptime
+% LocalWords:  resolution HRT jiffies strptime pre l'I value argument
 
 %%% Local Variables: 
 %%% mode: latex
 
 %%% Local Variables: 
 %%% mode: latex