Correzioni suggerite da Fabio Rossi, e altre cose trovate nel frattempo.
[gapil.git] / process.tex
index d59f9689c7cfcc4666227378f9b0309d29773745..f2c4f73bde2eb9955619c26c8a402cbd8b1ae26a 100644 (file)
@@ -374,8 +374,8 @@ seguenti segmenti:
   puntatori a \val{NULL}).\footnote{si ricordi che questo vale solo per le
     variabili che vanno nel segmento dati, e non è affatto vero in generale.}
    
-  Storicamente questo segmento viene chiamato BSS (da \textit{block started by
-    symbol}). La sua dimensione è fissa.
+  Storicamente questa seconda parte del segmento dati viene chiamata BSS (da
+  \textit{Block Started by Symbol}). La sua dimensione è fissa.
   
 \item Lo \textit{heap}. Tecnicamente lo si può considerare l'estensione del
   segmento dati, a cui di solito è posto giusto di seguito. È qui che avviene
@@ -401,7 +401,7 @@ seguenti segmenti:
 
 \begin{figure}[htb]
   \centering
-  \includegraphics[height=12cm]{img/memory_layout}
+  \includegraphics[height=11cm]{img/memory_layout}
   \caption{Disposizione tipica dei segmenti di memoria di un processo.}
   \label{fig:proc_mem_layout}
 \end{figure}
@@ -603,14 +603,13 @@ funzioni di libreria una propria versione (che pu
 specializzata per il debugging). Esistono varie librerie che forniscono dei
 sostituti opportuni delle routine di allocazione in grado, senza neanche
 ricompilare il programma,\footnote{esempi sono \textit{Dmalloc}
-  \href{http://dmalloc.com/}{http://dmalloc.com/} di Gray Watson ed
+  \href{http://dmalloc.com/}{\textsf{http://dmalloc.com/}} di Gray Watson ed
   \textit{Electric Fence} di Bruce Perens.} di eseguire diagnostiche anche
 molto complesse riguardo l'allocazione della memoria.
 
 
-
-\subsection{La funzione \func{alloca}}  
-\label{sec:proc_mem_alloca}
+\subsection{Le funzioni \func{alloca}, \func{brk} e \func{sbrk}}  
+\label{sec:proc_mem_sbrk_alloca}
 
 Una possibile alternativa all'uso di \func{malloc}, che non soffre dei
 problemi di \textit{memory leak}\index{\textit{memory~leak}} descritti in
@@ -666,9 +665,6 @@ Questo 
 cui torneremo in sez.~\ref{sec:proc_auto_var}.
 
 
-\subsection{Le funzioni \func{brk} e \func{sbrk}}  
-\label{sec:proc_mem_sbrk}
-
 Queste due funzioni vengono utilizzate soltanto quando è necessario effettuare
 direttamente la gestione della memoria associata allo spazio dati di un
 processo, ad esempio qualora si debba implementare la propria versione delle
@@ -902,7 +898,7 @@ di ambiente \cmd{IFS}.
 
 \begin{figure}[htb]
   \centering
-  \includegraphics[width=11cm]{img/argv_argc}
+  \includegraphics[width=13cm]{img/argv_argc}
   \caption{Esempio dei valori di \param{argv} e \param{argc} generati nella 
     scansione di una riga di comando.}
   \label{fig:proc_argv_argc}
@@ -921,7 +917,7 @@ questo meccanismo 
 In generale un programma Unix riceve da linea di comando sia gli argomenti che
 le opzioni, queste ultime sono standardizzate per essere riconosciute come
 tali: un elemento di \param{argv} che inizia con il carattere \texttt{'-'} e
-che non sia un singolo \texttt{'-'} o un \texttt{'--'} viene considerato
+che non sia un singolo \texttt{'-'} o un \texttt{'-{}-'} viene considerato
 un'opzione.  In genere le opzioni sono costituite da una lettera singola
 (preceduta dal carattere \cmd{'-'}) e possono avere o no un parametro
 associato; un comando tipico può essere quello mostrato in
@@ -960,7 +956,7 @@ che indica che non ci sono pi
 dichiarata in \param{optstring} viene ritornato il carattere \texttt{'?'}
 mentre se un opzione che lo richiede non è seguita da un parametro viene
 ritornato il carattere \texttt{':'}, infine se viene incontrato il valore
-\texttt{'--'} la scansione viene considerata conclusa, anche se vi sono altri
+\texttt{'-{}-'} la scansione viene considerata conclusa, anche se vi sono altri
 elementi di \param{argv} che cominciano con il carattere \texttt{'-'}.
 
 \begin{figure}[htb]
@@ -1050,7 +1046,7 @@ pi
 fig.~\ref{fig:proc_envirno_list}.
 \begin{figure}[htb]
   \centering
-  \includegraphics[width=11cm]{img/environ_var}
+  \includegraphics[width=13cm]{img/environ_var}
   \caption{Esempio di lista delle variabili di ambiente.}
   \label{fig:proc_envirno_list}
 \end{figure}
@@ -1308,21 +1304,23 @@ Come vedremo nei capitoli successivi, non sempre 
 numero fisso di argomenti per una funzione.  Lo standard ISO C prevede nella
 sua sintassi la possibilità di definire delle \textit{variadic
   function}\index{variadic} che abbiano un numero variabile di argomenti,
-attraverso l'uso della \textit{ellipsis} \code{...} nella dichiarazione della
-funzione; ma non provvede a livello di linguaggio alcun meccanismo con cui
-dette funzioni possono accedere ai loro argomenti.
-
-L'accesso viene invece realizzato dalle librerie standard che provvedono gli
-strumenti adeguati.  L'uso delle \textit{variadic function} prevede tre punti:
-\begin{itemize*}
+attraverso l'uso nella dichiarazione della funzione dello speciale costrutto
+``\texttt{...}'', che viene chiamato \textit{ellipsis}.  
+
+Lo standard però non provvede a livello di linguaggio alcun meccanismo con cui
+dette funzioni possono accedere ai loro argomenti.  L'accesso viene pertanto
+realizzato a livello delle librerie standard del C che provvedono gli
+strumenti adeguati.  L'uso di una \textit{variadic function} prevede quindi
+tre punti:
+\begin{itemize}
 \item \textsl{Dichiarare} la funzione come \textit{variadic} usando un
   prototipo che contenga una \textit{ellipsis}.
-\item \textsl{Definire} la funzione come \textit{variadic} usando lo stesso
+\item \textsl{Definire} la funzione come \textit{variadic} usando la stessa
   \textit{ellipsis}, ed utilizzare le apposite macro che consentono la
   gestione di un numero variabile di argomenti.
-\item \textsl{Chiamare} la funzione specificando prima gli argomenti fissi, e
-  a seguire gli addizionali.
-\end{itemize*}
+\item \textsl{Invocare} la funzione specificando prima gli argomenti fissi, ed
+  a seguire quelli addizionali.
+\end{itemize}
 
 Lo standard ISO C prevede che una \textit{variadic function}\index{variadic}
 abbia sempre almeno un argomento fisso; prima di effettuare la dichiarazione
@@ -1352,7 +1350,7 @@ L'unica modalit
 sequenziale; essi verranno estratti dallo stack secondo l'ordine in cui sono
 stati scritti. Per fare questo in \file{stdarg.h} sono definite delle apposite
 macro; la procedura da seguire è la seguente:
-\begin{enumerate*}
+\begin{enumerate}
 \item Inizializzare un puntatore alla lista degli argomenti di tipo
   \macro{va\_list} attraverso la macro \macro{va\_start}.
 \item Accedere ai vari argomenti opzionali con chiamate successive alla macro
@@ -1360,7 +1358,7 @@ macro; la procedura da seguire 
   il secondo e così via.
 \item Dichiarare la conclusione dell'estrazione degli argomenti invocando la
   macro \macro{va\_end}.
-\end{enumerate*}
+\end{enumerate}
 in generale è perfettamente legittimo richiedere meno argomenti di quelli che
 potrebbero essere stati effettivamente forniti, e nella esecuzione delle
 \macro{va\_arg} ci si può fermare in qualunque momento ed i restanti argomenti
@@ -1486,15 +1484,15 @@ programma: quello dell'uscita in caso di errore.
 
 \index{salto~non-locale|(} 
 
-Il C però non consente di effettuare un salto ad
-una etichetta definita in un'altra funzione, per cui se l'errore avviene in
-una funzione, e la sua gestione ordinaria è in un'altra, occorre usare quello
-che viene chiamato un \textsl{salto non-locale}.  Il caso classico in cui si
-ha questa necessità, citato sia da \cite{APUE} che da \cite{glibc}, è quello
-di un programma nel cui corpo principale vengono letti dei dati in ingresso
-sui quali viene eseguita, tramite una serie di funzioni di analisi, una
-scansione dei contenuti da si ottengono le indicazioni per l'esecuzione delle
-opportune operazioni.
+Il C però non consente di effettuare un salto ad una etichetta definita in
+un'altra funzione, per cui se l'errore avviene in una funzione, e la sua
+gestione ordinaria è in un'altra, occorre usare quello che viene chiamato un
+\textsl{salto non-locale}.  Il caso classico in cui si ha questa necessità,
+citato sia in \cite{APUE} che in \cite{glibc}, è quello di un programma nel
+cui corpo principale vengono letti dei dati in ingresso sui quali viene
+eseguita, tramite una serie di funzioni di analisi, una scansione dei
+contenuti, da cui si ottengono le indicazioni per l'esecuzione di opportune
+operazioni.
 
 Dato che l'analisi può risultare molto complessa, ed opportunamente suddivisa
 in fasi diverse, la rilevazione di un errore nei dati in ingresso può accadere
@@ -1575,10 +1573,10 @@ pertanto non si pu
 chiamate a questa funzione sono sicure solo in uno dei seguenti casi:
 \begin{itemize}
 \item come espressione di controllo in un comando condizionale, di selezione
-  o di iterazione (come \code{if}, \code{switch} o \code{while}).
+  o di iterazione (come \code{if}, \code{switch} o \code{while});
 \item come operando per un operatore di uguaglianza o confronto in una
   espressione di controllo di un comando condizionale, di selezione o di
-  iterazione.
+  iterazione;
 \item come operando per l'operatore di negazione (\code{!}) in una espressione
   di controllo di un comando condizionale, di selezione o di iterazione.
 \item come espressione a sé stante.