Ulteriori revisioni, finita l'introduzione con vari spostamenti e
[gapil.git] / intro.tex
index 785f0108705976b5d754df5391736f58dbd8b2f6..d0513cfc7ca5e8f8fdfa9def92e639de82bcd6c6 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -29,10 +29,7 @@ introdurremo alcuni degli standard principali a cui viene fatto riferimento.
 In questa prima sezione faremo una breve panoramica sull'architettura di un
 sistema operativo di tipo Unix, come GNU/Linux, e della relazione fra le varie
 parti che lo compongono. Chi avesse già una conoscenza di questa materia può
 In questa prima sezione faremo una breve panoramica sull'architettura di un
 sistema operativo di tipo Unix, come GNU/Linux, e della relazione fra le varie
 parti che lo compongono. Chi avesse già una conoscenza di questa materia può
-tranquillamente saltare questa sezione ad eccezione di
-sez.~\ref{sec:intro_syscall} dove introdotti alcuni concetti fondamentali
-relativi alle funzioni di libreria.
-
+tranquillamente saltare questa sezione.
 
 \subsection{Concetti base}
 \label{sec:intro_base_concept}
 
 \subsection{Concetti base}
 \label{sec:intro_base_concept}
@@ -293,51 +290,6 @@ fondamentale per capire il funzionamento del sistema, l'uso da parte dei
 programmi di una di queste funzioni resta lo stesso, sia che si tratti di una
 funzione interna della libreria che di una \textit{system call}.
 
 programmi di una di queste funzioni resta lo stesso, sia che si tratti di una
 funzione interna della libreria che di una \textit{system call}.
 
-Come accennato in genere ogni \textit{system call} è associata ad una omonima
-funzione di libreria, che è quella che si usa normalmente per invocarla. Le
-\textsl{glibc} consentono comunque, nel caso non sia presente una specifica
-funzione di libreria corrispondente o qualora si voglia eseguire una specifica
-versione,\footnote{alcune \textit{system call} sono state modificate nel corso
-  degli anni per aggiungere ad esempio delle funzionalità, l'interfaccia
-  proposta dalle \textsl{glibc} si cura in genere di mantenere una uniformità
-  chiamando le versioni corrette, ma qualora si voglia lavorare a basso
-  livello ed usare una specifica versione, si può fare ricorso a questa
-  funzione.} di eseguire direttamente una \textit{system call} tramite la
-funzione \funcd{syscall}, il cui prototipo (accessibile se si è definita la
-macro \macro{\_GNU\_SOURCE}, vedi sez.~\ref{sec:intro_gcc_glibc_std}) è:
-
-\begin{funcproto}{
-  \fhead{unistd.h}
-  \fhead{sys/syscall.h}
-  \fdecl{int syscall(int number, ...)}
-  \fdesc{Esegue la \textit{system call} indicata da \param{number}.}
-}
-{La funzione ritorna un intero dipendente dalla \textit{system call} invocata,
-in generale $0$ indica il successo e un valore negativo un errore.}
-\end{funcproto}
-
-La funzione richiede come primo argomento il numero della \textit{system call}
-da invocare, seguita dagli argomenti da passare alla stessa, che ovviamente
-dipendono da quest'ultima, e restituisce il codice di ritorno della
-\textit{system call} invocata. In generale un valore nullo indica il successo
-ed un valore negativo è un codice di errore che poi viene memorizzato nella
-variabile \var{errno} (sulla gestione degli errori torneremo in dettaglio in
-sez.~\ref{sec:sys_errors}).
-
-Il valore di \param{number} dipende sia dalla versione di kernel che
-dall'architettura,\footnote{in genere le vecchie \textit{system call} non
-  vengono eliminate e se ne aggiungono di nuove con nuovi numeri.}  ma
-ciascuna \textit{system call} viene in genere identificata da una costante
-nella forma \texttt{SYS\_*} dove al prefisso viene aggiunto il nome che spesso
-corrisponde anche alla omonima funzione di libreria; queste costanti sono
-definite nel file \texttt{sys/syscall.h}, ma si possono anche usare
-direttamente valori numerici.
-
-%
-% TODO:trattare non so se qui o altrove vsyscall e vDSO, vedi
-% http://davisdoesdownunder.blogspot.com/2011/02/linux-syscall-vsyscall-and-vdso-oh-my.html 
-% http://www.win.tue.nl/~aeb/linux/lk/lk-4.html
-%
 
 \subsection{Un sistema multiutente}
 \label{sec:intro_multiuser}
 
 \subsection{Un sistema multiutente}
 \label{sec:intro_multiuser}
@@ -427,7 +379,7 @@ interfacce di programmazione e le altre caratteristiche di un sistema
 unix-like (alcuni standardizzano pure i comandi base del sistema e la shell)
 ed in particolare ci concentreremo sul come ed in che modo essi sono
 supportati sia per quanto riguarda il kernel che la Libreria Standard del C,
 unix-like (alcuni standardizzano pure i comandi base del sistema e la shell)
 ed in particolare ci concentreremo sul come ed in che modo essi sono
 supportati sia per quanto riguarda il kernel che la Libreria Standard del C,
-con una particolare attenzione alle \acr{glibc}.
+con una particolare attenzione alla \acr{glibc}.
 
 
 \subsection{Lo standard ANSI C}
 
 
 \subsection{Lo standard ANSI C}
@@ -449,65 +401,21 @@ linguaggio C (operatori, parole chiave, tipi di dati) lo standard prevede
 anche una libreria di funzioni che devono poter essere implementate su
 qualunque sistema operativo.
 
 anche una libreria di funzioni che devono poter essere implementate su
 qualunque sistema operativo.
 
-\begin{table}[htb]
-  \footnotesize
-  \centering
-  \begin{tabular}[c]{|l|c|c|l|}
-    \hline
-    \multirow{2}{*}{\textbf{Header}}&
-    \multicolumn{2}{|c|}{\textbf{Standard}}&
-    \multirow{2}{*}{\textbf{Contenuto}} \\
-    \cline{2-3}
-    & ANSI C& POSIX& \\
-    \hline
-    \hline
-    \file{assert.h}&$\bullet$&    --   & Verifica le asserzioni fatte in un
-                                         programma.\\ 
-    \file{ctype.h} &$\bullet$&    --   & Tipi standard.\\
-    \file{dirent.h}&   --    &$\bullet$& Manipolazione delle directory.\\
-    \file{errno.h} &   --    &$\bullet$& Errori di sistema.\\
-    \file{fcntl.h} &   --    &$\bullet$& Controllo sulle opzioni dei file.\\
-    \file{limits.h}&   --    &$\bullet$& Limiti e parametri del sistema.\\
-    \file{malloc.h}&$\bullet$&    --   & Allocazione della memoria.\\
-    \file{setjmp.h}&$\bullet$&    --   & Salti non locali.\\
-    \file{signal.h}&   --    &$\bullet$& Gestione dei segnali.\\
-    \file{stdarg.h}&$\bullet$&    --   & Gestione di funzioni a argomenti
-                                         variabili.\\ 
-    \file{stdio.h} &$\bullet$&    --   & I/O bufferizzato in standard ANSI C.\\
-    \file{stdlib.h}&$\bullet$&    --   & Definizioni della libreria standard.\\
-    \file{string.h}&$\bullet$&    --   & Manipolazione delle stringhe.\\
-    \file{time.h}  &   --    &$\bullet$& Gestione dei tempi.\\
-    \file{times.h} &$\bullet$&    --   & Gestione dei tempi.\\
-    \file{unistd.h}&   --    &$\bullet$& Unix standard library.\\
-    \file{utmp.h}  &   --    &$\bullet$& Registro connessioni utenti.\\
-    \hline
-  \end{tabular}
-  \caption{Elenco dei vari header file definiti dallo standard POSIX.}
-  \label{tab:intro_posix_header}
-\end{table}
-
 Per questo motivo, anche se lo standard non ha alcun riferimento ad un sistema
 di tipo Unix, GNU/Linux (per essere precisi la \acr{glibc}), come molti Unix
 moderni, provvede la compatibilità con questo standard, fornendo le funzioni
 di libreria da esso previste. Queste sono dichiarate in una serie di
 Per questo motivo, anche se lo standard non ha alcun riferimento ad un sistema
 di tipo Unix, GNU/Linux (per essere precisi la \acr{glibc}), come molti Unix
 moderni, provvede la compatibilità con questo standard, fornendo le funzioni
 di libreria da esso previste. Queste sono dichiarate in una serie di
-\textit{header file}\footnote{si chiamano così i file di dichiarazione di
-  variabili, tipi e funzioni, usati normalmente da un compilatore C; per poter
-  accedere alle funzioni occorre includere con la direttiva \code{\#include}
-  questi file nei propri programmi ed in seguito per ciascuna funzione che
-  tratteremo indicheremo anche gli \textit{header file} necessari ad usarla.}
-(anch'essi forniti dalla \acr{glibc}); in tab.~\ref{tab:intro_posix_header} si
-sono riportati i principali \textit{header file} definiti negli standard POSIX
-ed ANSI C, che sono anche quelli definiti negli altri standard descritti nelle
-sezioni successive.
+\textit{header file} anch'essi forniti dalla \acr{glibc} (tratteremo
+l'argomento in sez.~\ref{sec:proc_syscall}).
 
 In realtà la \acr{glibc} ed i relativi \textit{header file} definiscono un
 insieme di funzionalità in cui sono incluse come sottoinsieme anche quelle
 previste dallo standard ANSI C. È possibile ottenere una conformità stretta
 allo standard (scartando le funzionalità addizionali) usando il \cmd{gcc} con
 l'opzione \cmd{-ansi}. Questa opzione istruisce il compilatore a definire nei
 
 In realtà la \acr{glibc} ed i relativi \textit{header file} definiscono un
 insieme di funzionalità in cui sono incluse come sottoinsieme anche quelle
 previste dallo standard ANSI C. È possibile ottenere una conformità stretta
 allo standard (scartando le funzionalità addizionali) usando il \cmd{gcc} con
 l'opzione \cmd{-ansi}. Questa opzione istruisce il compilatore a definire nei
-vari header file soltanto le funzionalità previste dallo standard ANSI C e a
-non usare le varie estensioni al linguaggio e al preprocessore da esso
-supportate.
+vari \textit{header file} soltanto le funzionalità previste dallo standard
+ANSI C e a non usare le varie estensioni al linguaggio e al preprocessore da
+esso supportate.
 
 
 \subsection{I tipi di dati primitivi}
 
 
 \subsection{I tipi di dati primitivi}
@@ -572,7 +480,7 @@ infinita serie di problemi di portabilità.
 Per questo motivo tutte le funzioni di libreria di solito non fanno
 riferimento ai tipi elementari dello standard del linguaggio C, ma ad una
 serie di \index{tipo!primitivo} \textsl{tipi primitivi} del sistema, riportati
 Per questo motivo tutte le funzioni di libreria di solito non fanno
 riferimento ai tipi elementari dello standard del linguaggio C, ma ad una
 serie di \index{tipo!primitivo} \textsl{tipi primitivi} del sistema, riportati
-in tab.~\ref{tab:intro_primitive_types}, e definiti nell'header file
+in tab.~\ref{tab:intro_primitive_types}, e definiti nell'\textit{header file}
 \file{sys/types.h}, in modo da mantenere completamente indipendenti i tipi
 utilizzati dalle funzioni di sistema dai tipi elementari supportati dal
 compilatore C.
 \file{sys/types.h}, in modo da mantenere completamente indipendenti i tipi
 utilizzati dalle funzioni di sistema dai tipi elementari supportati dal
 compilatore C.
@@ -802,8 +710,8 @@ Issue 4, da cui la sigla XPG4, che aggiungeva l'interfaccia XTI (\textit{X
   Transport Interface}) mirante a soppiantare (senza molto successo)
 l'interfaccia dei socket derivata da BSD. Una seconda versione della guida fu
 rilasciata nel 1994; questa è nota con il nome di Spec 1170 (dal numero delle
   Transport Interface}) mirante a soppiantare (senza molto successo)
 l'interfaccia dei socket derivata da BSD. Una seconda versione della guida fu
 rilasciata nel 1994; questa è nota con il nome di Spec 1170 (dal numero delle
-interfacce, header e comandi definiti) ma si fa riferimento ad essa anche come
-XPG4v2.
+interfacce, intestazioni e comandi definiti) ma si fa riferimento ad essa
+anche come XPG4v2.
 
 Nel 1993 il marchio Unix passò di proprietà dalla Novell (che a sua volta lo
 aveva comprato dalla AT\&T) al consorzio X/Open che iniziò a pubblicare le sue
 
 Nel 1993 il marchio Unix passò di proprietà dalla Novell (che a sua volta lo
 aveva comprato dalla AT\&T) al consorzio X/Open che iniziò a pubblicare le sue
@@ -849,8 +757,8 @@ dall'aggiornamento vada a definire la quarta versione delle \textit{Single
 In Linux, se si usa la \acr{glibc}, la conformità agli standard appena
 descritti può essere richiesta sia attraverso l'uso di opportune opzioni del
 compilatore (il \texttt{gcc}) che definendo delle specifiche costanti prima
 In Linux, se si usa la \acr{glibc}, la conformità agli standard appena
 descritti può essere richiesta sia attraverso l'uso di opportune opzioni del
 compilatore (il \texttt{gcc}) che definendo delle specifiche costanti prima
-dell'inclusione dei file di dichiarazione (gli \textit{header file}) che
-definiscono le funzioni di libreria.
+dell'inclusione dei file di intestazione (gli \textit{header file}, vedi
+sez.~\ref{sec:proc_syscall}) che definiscono le funzioni di libreria.
 
 Ad esempio se si vuole che i programmi seguano una stretta attinenza allo
 standard ANSI C si può usare l'opzione \texttt{-ansi} del compilatore, e non
 
 Ad esempio se si vuole che i programmi seguano una stretta attinenza allo
 standard ANSI C si può usare l'opzione \texttt{-ansi} del compilatore, e non
@@ -876,7 +784,7 @@ funzionalità che la \acr{glibc} può mettere a disposizione:\footnote{le macro
   che non devono assolutamente mai essere usate direttamente. } questo può
 essere fatto attraverso l'opzione \texttt{-D} del compilatore, ma è buona
 norma farlo inserendo gli opportuni \code{\#define} prima della inclusione dei
   che non devono assolutamente mai essere usate direttamente. } questo può
 essere fatto attraverso l'opzione \texttt{-D} del compilatore, ma è buona
 norma farlo inserendo gli opportuni \code{\#define} prima della inclusione dei
-propri \textit{header file}.
+propri \textit{header file} (vedi sez.~\ref{sec:proc_syscall}).
 
 Le macro disponibili per controllare l'aderenza ai vari standard messi a
 disposizione della \acr{glibc}, che rendono disponibili soltanto le funzioni
 
 Le macro disponibili per controllare l'aderenza ai vari standard messi a
 disposizione della \acr{glibc}, che rendono disponibili soltanto le funzioni
@@ -1125,7 +1033,7 @@ sempre definite prima dell'inclusione dei file di dichiarazione.
 % LocalWords:  assert ctype dirent errno fcntl limits malloc setjmp signal utmp
 % LocalWords:  stdarg stdio stdlib string times unistd library int short caddr
 % LocalWords:  address clock dev ino inode key IPC loff nlink off pid rlim size
 % LocalWords:  assert ctype dirent errno fcntl limits malloc setjmp signal utmp
 % LocalWords:  stdarg stdio stdlib string times unistd library int short caddr
 % LocalWords:  address clock dev ino inode key IPC loff nlink off pid rlim size
-% LocalWords:  sigset ssize ptrdiff sys nell'header IEEE Richard Portable of TR
+% LocalWords:  sigset ssize ptrdiff sys IEEE Richard Portable of TR
 % LocalWords:  Operating Interface dell'IEEE Electrical and Electronics thread
 % LocalWords:  Engeneers Socket NT matching regular expression scheduling l'I
 % LocalWords:  XPG Portability Issue Application Programmable XTI Transport AT
 % LocalWords:  Operating Interface dell'IEEE Electrical and Electronics thread
 % LocalWords:  Engeneers Socket NT matching regular expression scheduling l'I
 % LocalWords:  XPG Portability Issue Application Programmable XTI Transport AT