Transizione \macro{} -> \const{}, \errcode{}, \val{}
[gapil.git] / intro.tex
index 1dfaaf92f7d4da2fa3eedac8fa5b57f7c31adbf8..f3b65754937c36a0b2e2240419b9b7e3f4bf5143 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -1,3 +1,13 @@
+%% intro.tex
+%%
+%% Copyright (C) 2000-2002 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 "Prefazione",
+%% with no Front-Cover Texts, and with no Back-Cover Texts.  A copy of the
+%% license is included in the section entitled "GNU Free Documentation
+%% License".
+%%
 \chapter{L'architettura del sistema}
 \label{cha:intro_unix}
 
 \chapter{L'architettura del sistema}
 \label{cha:intro_unix}
 
@@ -52,13 +62,13 @@ all'hardware, mentre i programmi normali vengono eseguiti in modalit
 (e non possono accedere direttamente alle zone di memoria riservate o alle
 porte di input/output).
 
 (e non possono accedere direttamente alle zone di memoria riservate o alle
 porte di input/output).
 
-Una parte del kernel, lo \textit{scheduler}, si occupa di stabilire, ad
-intervalli fissi e sulla base di un opportuno calcolo delle priorità, quale
-``processo'' deve essere posto in esecuzione (il cosiddetto \textit{preemptive
-  scheduling}\index{preemptive scheduling}). Questo verrà comunque eseguito in
-modalità protetta; quando necessario il processo potrà accedere alle risorse
-hardware soltanto attraverso delle opportune chiamate al sistema che
-restituiranno il controllo al kernel.
+Una parte del kernel, lo \textit{scheduler}\index{scheduler}, si occupa di
+stabilire, ad intervalli fissi e sulla base di un opportuno calcolo delle
+priorità, quale ``processo'' deve essere posto in esecuzione (il cosiddetto
+\textit{preemptive scheduling}\index{preemptive scheduling}). Questo verrà
+comunque eseguito in modalità protetta; quando necessario il processo potrà
+accedere alle risorse hardware soltanto attraverso delle opportune chiamate al
+sistema che restituiranno il controllo al kernel.
 
 La memoria viene sempre gestita dal kernel attraverso il meccanismo della
 \textsl{memoria virtuale}\index{memoria virtuale}, che consente di assegnare a
 
 La memoria viene sempre gestita dal kernel attraverso il meccanismo della
 \textsl{memoria virtuale}\index{memoria virtuale}, che consente di assegnare a
@@ -154,7 +164,17 @@ Ogni versione di Unix ha storicamente sempre avuto un certo numero di queste
 chiamate, che sono riportate nella seconda sezione del \textsl{Manuale di
   programmazione di Unix} (quella cui si accede con il comando \cmd{man 2
   <nome>}) e Linux non fa eccezione. Queste sono poi state codificate da vari
 chiamate, che sono riportate nella seconda sezione del \textsl{Manuale di
   programmazione di Unix} (quella cui si accede con il comando \cmd{man 2
   <nome>}) e Linux non fa eccezione. Queste sono poi state codificate da vari
-standard, che esamineremo brevemente in \secref{sec:intro_standard}.
+standard, che esamineremo brevemente in \secref{sec:intro_standard}. Uno
+schema elementare della struttura del sistema è riportato in
+\figref{fig:intro_sys_struct}.
+
+\begin{figure}[htb]
+  \centering
+  \includegraphics[width=10cm]{img/struct_sys}
+  \caption{Schema di massima della struttura di interazione fra processi,
+    kernel e dispositivi in Linux.}
+  \label{fig:intro_sys_struct}
+\end{figure}
 
 Normalmente ciascuna di queste chiamate al sistema viene rimappata in
 opportune funzioni con lo stesso nome definite dentro la Libreria Standard del
 
 Normalmente ciascuna di queste chiamate al sistema viene rimappata in
 opportune funzioni con lo stesso nome definite dentro la Libreria Standard del
@@ -171,17 +191,22 @@ programma.
 
 Quanto appena illustrato mette in evidenza il fatto che nella stragrande
 maggioranza dei casi,\footnote{esistono implementazioni diverse delle librerie
 
 Quanto appena illustrato mette in evidenza il fatto che nella stragrande
 maggioranza dei casi,\footnote{esistono implementazioni diverse delle librerie
-  del C, come le \textit{libc5} o le \textit{uclib}, che non derivano dal
-  progetto GNU, ma oggi sono, tranne casi particolari, completamente
-  soppiantate dalle \acr{glibc}.} si dovrebbe usare il nome GNU/Linux
-(piuttosto che soltanto Linux) in quanto una parte essenziale del sistema
-(senza la quale niente funzionerebbe) è la GNU Standard C Library (in breve
-\acr{glibc}), ovvero la libreria realizzata dalla Free Software Foundation
-nella quale sono state implementate tutte le funzioni essenziali definite
-negli standard POSIX e ANSI C, utilizzabili da qualunque programma.
+  Standard del C, come le \textit{libc5} o le \textit{uClib}, che non derivano
+  dal progetto GNU. Le \textit{libc5} oggi sono, tranne casi particolari,
+  completamente soppiantate dalle \acr{glibc}, le \textit{uClib} pur non
+  essendo complete come le \acr{glibc}, restano invece molto diffuse nel mondo
+  embedded per le loro di dimensioni ridotte (e soprattutto la possibilità di
+  togliere le parti non necessearie), e pertanto costituiscono un valido
+  rimpiazzo delle \acr{glibc} in tutti quei sistemi specializzati che
+  richiedono una minima occupazione di memoria.} si dovrebbe usare il nome
+GNU/Linux (piuttosto che soltanto Linux) in quanto una parte essenziale del
+sistema (senza la quale niente funzionerebbe) è la GNU Standard C Library (in
+breve \acr{glibc}), ovvero la libreria realizzata dalla Free Software
+Foundation nella quale sono state implementate tutte le funzioni essenziali
+definite negli standard POSIX e ANSI C, utilizzabili da qualunque programma.
 
 Le funzioni di questa libreria sono quelle riportate dalla terza sezione del
 
 Le funzioni di questa libreria sono quelle riportate dalla terza sezione del
-\textsl{Manuale di Programmazione di Unix }(cioè accessibili con il comando
+\textsl{Manuale di Programmazione di Unix(cioè accessibili con il comando
 \cmd{man 3 <nome>}) e sono costruite sulla base delle chiamate al sistema del
 kernel; è importante avere presente questa distinzione, fondamentale dal punto
 di vista dell'implementazione, anche se poi, nella realizzazione di normali
 \cmd{man 3 <nome>}) e sono costruite sulla base delle chiamate al sistema del
 kernel; è importante avere presente questa distinzione, fondamentale dal punto
 di vista dell'implementazione, anche se poi, nella realizzazione di normali
@@ -283,36 +308,44 @@ qualunque sistema operativo.
 Per questo motivo, anche se lo standard non ha alcun riferimento ad un sistema
 di tipo Unix, GNU/Linux (per essere precisi le \acr{glibc}), come molti Unix
 moderni, provvede la compatibilità con questo standard, fornendo le funzioni
 Per questo motivo, anche se lo standard non ha alcun riferimento ad un sistema
 di tipo Unix, GNU/Linux (per essere precisi le \acr{glibc}), come molti Unix
 moderni, provvede la compatibilità con questo standard, fornendo le funzioni
-di libreria da esso previste. Queste sono dichiarate in quindici header file
-(anch'essi provvisti dalla \acr{glibc}), uno per ciascuna delle quindici aree
-in cui è stata suddivisa una libreria standard. In
-\tabref{tab:intro_posix_header} si sono riportati questi header, insieme a
-quelli definiti negli altri standard descritti nelle sezioni successive.
+di libreria da esso previste. Queste sono dichiarate in una serie di
+\textit{header file}\footnote{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; per ciascuna funzione che tratteremo in seguito
+  indicheremo anche gli \textit{header file} necessari ad usarla.}  (anch'essi
+provvisti dalla \acr{glibc}), In \tabref{tab:intro_posix_header} si sono
+riportati i principali \textit{header file} definiti nello standard POSIX,
+insieme a quelli definiti negli altri standard descritti nelle sezioni
+successive.
 
 \begin{table}[htb]
   \footnotesize
   \centering
 
 \begin{table}[htb]
   \footnotesize
   \centering
-  \begin{tabular}[c]{|l|l|}
+  \begin{tabular}[c]{|l|c|c|l|}
     \hline
     \hline
-    \textbf{Standard} & \textbf{Contenuto} \\
+    \multirow{2}{*}{\textbf{Header}}&
+    \multicolumn{2}{|c|}{\textbf{Standard}}&
+    \multirow{2}{*}{\textbf{Contenuto}} \\
+    \cline{2-3}
+    & ANSI C& POSIX& \\
     \hline
     \hline
     \hline
     \hline
-    \file{assert.h}& Verifica le asserzioni fatte in un programma.\\
-    \file{cpio.h}  & .\\
-    \file{} & .\\
-    \file{} & .\\
-    \file{} & .\\
-    \file{} & .\\
-    \file{} & .\\
-    \file{} & .\\
-    \file{} & .\\
-    \file{} & .\\
-    \file{} & .\\
-    \file{stdio.h} & I/O bufferizzato in standard ANSI C.\\
-    \file{stdlib.h}& definizioni della libreria standard.\\
+    \file{assert.h}&$\bullet$&$\bullet$& Verifica le asserzioni fatte in un
+                                     programma.\\ 
+    \file{errno.h} &$\bullet$&$\bullet$& Errori di sistema.\\
+    \file{fcntl.h} &$\bullet$&$\bullet$& Controllo sulle opzioni dei file.\\
+    \file{limits.h}&$\bullet$&$\bullet$& Limiti e parametri del sistema.\\
+    \file{} &$\bullet$&$\bullet$& .\\
+    \file{} &$\bullet$&$\bullet$& .\\
+    \file{} &$\bullet$&$\bullet$& .\\
+    \file{} &$\bullet$&$\bullet$& .\\
+    \file{} &$\bullet$&$\bullet$& .\\
+    \file{stdio.h} &$\bullet$&$\bullet$& I/O bufferizzato in standard ANSI C.\\
+    \file{stdlib.h}&$\bullet$&$\bullet$& definizioni della libreria standard.\\
     \hline
   \end{tabular}
     \hline
   \end{tabular}
-  \caption{Elenco dei vari file di include definiti dallo standard POSIX.}
+  \caption{Elenco dei vari header file definiti dallo standard POSIX.}
   \label{tab:intro_posix_header}
 \end{table}
 
   \label{tab:intro_posix_header}
 \end{table}
 
@@ -345,7 +378,7 @@ tipi si sono rivelati inadeguati, e se ne 
 \begin{table}[htb]
   \footnotesize
   \centering
 \begin{table}[htb]
   \footnotesize
   \centering
-  \begin{tabular}[c]{|l|l|}
+  \begin{tabular}[c]{|l|c|c|l|}
     \hline
     \textbf{Tipo} & \textbf{Contenuto} \\
     \hline
     \hline
     \textbf{Tipo} & \textbf{Contenuto} \\
     \hline
@@ -598,12 +631,12 @@ propri header file.
 
 Le macro disponibili per i vari standard sono le seguenti:
 \begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}}
 
 Le macro disponibili per i vari standard sono le seguenti:
 \begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}}
-\item[\macro{\_POSIX\_SOURCE}] definendo questa macro si rendono disponibili
+\item[\const{\_POSIX\_SOURCE}] definendo questa macro si rendono disponibili
   tutte le funzionalità dello standard POSIX.1 (la versione IEEE Standard
   1003.1) insieme a tutte le funzionalità dello standard ISO C. Se viene anche
   tutte le funzionalità dello standard POSIX.1 (la versione IEEE Standard
   1003.1) insieme a tutte le funzionalità dello standard ISO C. Se viene anche
-  definita con un intero positivo la macro \macro{\_POSIX\_C\_SOURCE} lo stato
+  definita con un intero positivo la macro \const{\_POSIX\_C\_SOURCE} lo stato
   di questa non viene preso in considerazione.
   di questa non viene preso in considerazione.
-\item[\macro{\_POSIX\_C\_SOURCE}] definendo questa macro ad un valore intero
+\item[\const{\_POSIX\_C\_SOURCE}] definendo questa macro ad un valore intero
   positivo si controlla quale livello delle funzionalità specificate da POSIX
   viene messa a disposizione; più alto è il valore maggiori sono le
   funzionalità. Se è uguale a '1' vengono attivate le funzionalità specificate
   positivo si controlla quale livello delle funzionalità specificate da POSIX
   viene messa a disposizione; più alto è il valore maggiori sono le
   funzionalità. Se è uguale a '1' vengono attivate le funzionalità specificate
@@ -614,7 +647,7 @@ Le macro disponibili per i vari standard sono le seguenti:
   Standard 1003.1b-1993).  Un valore maggiore o uguale a `199506L' attiva le
   funzionalità POSIX.1 specificate nell'edizione del 1996 (ISO/IEC 9945-1:
   1996). Valori superiori abiliteranno ulteriori estensioni.
   Standard 1003.1b-1993).  Un valore maggiore o uguale a `199506L' attiva le
   funzionalità POSIX.1 specificate nell'edizione del 1996 (ISO/IEC 9945-1:
   1996). Valori superiori abiliteranno ulteriori estensioni.
-\item[\macro{\_BSD\_SOURCE}] definendo questa macro si attivano le
+\item[\const{\_BSD\_SOURCE}] definendo questa macro si attivano le
   funzionalità derivate da BSD4.3, insieme a quelle previste dagli standard
   ISO C, POSIX.1 e POSIX.2. Alcune delle funzionalità previste da BSD sono
   però in conflitto con le corrispondenti definite nello standard POSIX.1, in
   funzionalità derivate da BSD4.3, insieme a quelle previste dagli standard
   ISO C, POSIX.1 e POSIX.2. Alcune delle funzionalità previste da BSD sono
   però in conflitto con le corrispondenti definite nello standard POSIX.1, in
@@ -625,29 +658,29 @@ Le macro disponibili per i vari standard sono le seguenti:
   questo caso occorre pertanto anche usare l'opzione \cmd{-lbsd-compat} con il
   compilatore per indicargli di utilizzare le versioni nella libreria di
   compatibilità prima di quelle normali.
   questo caso occorre pertanto anche usare l'opzione \cmd{-lbsd-compat} con il
   compilatore per indicargli di utilizzare le versioni nella libreria di
   compatibilità prima di quelle normali.
-\item[\macro{\_SVID\_SOURCE}] definendo questa macro si attivano le
+\item[\const{\_SVID\_SOURCE}] definendo questa macro si attivano le
   funzionalità derivate da SVID. Esse comprendono anche quelle definite negli
   standard ISO C, POSIX.1, POSIX.2, and X/Open.
   funzionalità derivate da SVID. Esse comprendono anche quelle definite negli
   standard ISO C, POSIX.1, POSIX.2, and X/Open.
-\item[\macro{\_XOPEN\_SOURCE}] definendo questa macro si attivano le
+\item[\const{\_XOPEN\_SOURCE}] definendo questa macro si attivano le
   funzionalità descritte nella \textit{X/Open Portability Guide}. Anche queste
   sono un soprainsieme di quelle definite in POSIX.1 e POSIX.2 ed in effetti
   funzionalità descritte nella \textit{X/Open Portability Guide}. Anche queste
   sono un soprainsieme di quelle definite in POSIX.1 e POSIX.2 ed in effetti
-  sia \macro{\_POSIX\_SOURCE} che \macro{\_POSIX\_C\_SOURCE} vengono
+  sia \const{\_POSIX\_SOURCE} che \const{\_POSIX\_C\_SOURCE} vengono
   automaticamente definite. Sono incluse anche ulteriori funzionalità
   disponibili in BSD e SVID. Se il valore della macro è posto a 500 questo
   include anche le nuove definizioni introdotte con la \textit{Single UNIX
     Specification, version 2}, cioè Unix98.
   automaticamente definite. Sono incluse anche ulteriori funzionalità
   disponibili in BSD e SVID. Se il valore della macro è posto a 500 questo
   include anche le nuove definizioni introdotte con la \textit{Single UNIX
     Specification, version 2}, cioè Unix98.
-\item[\macro{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si attivano le
+\item[\const{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si attivano le
   ulteriori funzionalità necessarie ad essere conformi al rilascio del marchio
   \textit{X/Open Unix}.
   ulteriori funzionalità necessarie ad essere conformi al rilascio del marchio
   \textit{X/Open Unix}.
-\item[\macro{\_ISOC99\_SOURCE}] definendo questa macro si attivano le
+\item[\const{\_ISOC99\_SOURCE}] definendo questa macro si attivano le
   funzionalità previste per la revisione delle librerie standard del C
   denominato ISO C99. Dato che lo standard non è ancora adottato in maniera
   ampia queste non sono abilitate automaticamente, ma le \acr{glibc} hanno già
   un'implementazione completa che può essere attivata definendo questa macro.
   funzionalità previste per la revisione delle librerie standard del C
   denominato ISO C99. Dato che lo standard non è ancora adottato in maniera
   ampia queste non sono abilitate automaticamente, ma le \acr{glibc} hanno già
   un'implementazione completa che può essere attivata definendo questa macro.
-\item[\macro{\_LARGEFILE\_SOURCE}] definendo questa macro si attivano le
+\item[\const{\_LARGEFILE\_SOURCE}] definendo questa macro si attivano le
   funzionalità per il supporto dei file di grandi dimensioni (il \textit{Large
     File Support} o LFS) con indici e dimensioni a 64 bit.
   funzionalità per il supporto dei file di grandi dimensioni (il \textit{Large
     File Support} o LFS) con indici e dimensioni a 64 bit.
-\item[\macro{\_GNU\_SOURCE}] definendo questa macro si attivano tutte le
+\item[\const{\_GNU\_SOURCE}] definendo questa macro si attivano tutte le
   funzionalità disponibili: ISO C89, ISO C99, POSIX.1, POSIX.2, BSD, SVID,
   X/Open, LFS più le estensioni specifiche GNU. Nel caso in cui BSD e POSIX
   confliggano viene data la precedenza a POSIX.
   funzionalità disponibili: ISO C89, ISO C99, POSIX.1, POSIX.2, BSD, SVID,
   X/Open, LFS più le estensioni specifiche GNU. Nel caso in cui BSD e POSIX
   confliggano viene data la precedenza a POSIX.
@@ -656,7 +689,7 @@ Le macro disponibili per i vari standard sono le seguenti:
 In particolare è da sottolineare che le \acr{glibc} supportano alcune
 estensioni specifiche GNU, che non sono comprese in nessuno degli
 standard citati. Per poterle utilizzare esse devono essere attivate
 In particolare è da sottolineare che le \acr{glibc} supportano alcune
 estensioni specifiche GNU, che non sono comprese in nessuno degli
 standard citati. Per poterle utilizzare esse devono essere attivate
-esplicitamente definendo la macro \macro{\_GNU\_SOURCE} prima di
+esplicitamente definendo la macro \const{\_GNU\_SOURCE} prima di
 includere i vari header file.
 
 
 includere i vari header file.