Rinominati app_a e app_b
[gapil.git] / process.tex
index 750db60680b1ed2a6baef6c2506d6b74eb8c71c6..e663713f93584f9029a0cc657cbee66cd7bed344 100644 (file)
@@ -388,7 +388,7 @@ programma C viene suddiviso nei seguenti segmenti:
 
 \begin{figure}[htb]
   \centering
 
 \begin{figure}[htb]
   \centering
-  
+  \includegraphics[width=5cm]{img/memory_layout.eps}
   \caption{Disposizione tipica dei segmenti di memoria di un processo}
   \label{fig:proc_mem_layout}
 \end{figure}
   \caption{Disposizione tipica dei segmenti di memoria di un processo}
   \label{fig:proc_mem_layout}
 \end{figure}
@@ -496,8 +496,8 @@ la funzione lo utilzza, altrimenti rialloca altrove un blocco della dimensione
 voluta copiandoci automaticamente il contenuto, lo spazio in più non viene
 inizializzato. 
 
 voluta copiandoci automaticamente il contenuto, lo spazio in più non viene
 inizializzato. 
 
-Il fatto che il blocco di memoria restituito da \texttt{realloc} possa
-camabiare comporta che si deve sempre riassegnare al puntatore passato per il
+Il fatto che il blocco di memoria restituito da \func{realloc} possa
+cambiare comporta che si deve sempre riassegnare al puntatore passato per il
 ridimensionamento il valore di ritorno della funzione, e che non ci devono
 essere altri puntatori che puntino all'interno di un'area che si vuole
 ridimensionare.
 ridimensionamento il valore di ritorno della funzione, e che non ci devono
 essere altri puntatori che puntino all'interno di un'area che si vuole
 ridimensionare.
@@ -537,6 +537,7 @@ le disallocazione, e definisce anche una serie di possibili agganci che
 permettono di sostituire alle funzioni di libreria una propria versione (che
 può essere più o meno specializzata per il debugging).
 
 permettono di sostituire alle funzioni di libreria una propria versione (che
 può essere più o meno specializzata per il debugging).
 
+
 \subsection{La funzione \texttt{alloca}}  
 \label{sec:proc_mem_alloca}
 
 \subsection{La funzione \texttt{alloca}}  
 \label{sec:proc_mem_alloca}
 
@@ -558,8 +559,8 @@ viene rilasciata automaticamente al ritorno della funzione.
 Come è evidente questa funzione ha molti vantaggi, e permette di evitare i
 problemi di memory leak non essendo più necessaria la deallocazione esplicita;
 una delle ragioni principali per usarla è però che funziona anche quando si
 Come è evidente questa funzione ha molti vantaggi, e permette di evitare i
 problemi di memory leak non essendo più necessaria la deallocazione esplicita;
 una delle ragioni principali per usarla è però che funziona anche quando si
-usa \texttt{longjump} per uscire con un salto non locale da una funzione (vedi
-\secref{sec:proc_longjmp}), 
+usa \func{longjump} per uscire con un salto non locale da una funzione (vedi
+\secref{sec:proc_longjmp}),
 
 Un altro vantaggio e che in Linux la funzione è molto veloce e non viene
 sprecato spazio, infatti non è necessario gestire un pool di memoria da
 
 Un altro vantaggio e che in Linux la funzione è molto veloce e non viene
 sprecato spazio, infatti non è necessario gestire un pool di memoria da
@@ -572,6 +573,17 @@ cerca di allocare troppa memoria non si ottiene un messaggio di errore, ma un
 segnale di \textit{segmentation violation} analogo a quello che si avrebbe da
 una ricorsione infinita.
 
 segnale di \textit{segmentation violation} analogo a quello che si avrebbe da
 una ricorsione infinita.
 
+Inoltre non è chiaramente possibile usare questa funzione per allocare memoria
+che deve poi essere usata anche al di fuori della funzione in cui questa viene
+chiamata, in quanto all'uscita dalla funzione lo spazio allocato diventerebbe
+libero, e potrebbe essere sovrascritto all'invocazione di nuove funzioni con
+conseguenze imprevedibili. 
+
+Questo è lo stesso problema potenziale che si può avere con le variabili
+automatiche; un errore comune infatti è quello di restituire al chiamante un
+puntatore ad una di queste variabili, che sarà automaticamente distrutta
+all'uscita della funzione, con gli stessi problemi appena citati per
+\func{alloca}.
 
 \subsection{Le funzioni \texttt{brk} e \texttt{sbrk}}  
 \label{sec:proc_mem_sbrk}
 
 \subsection{Le funzioni \texttt{brk} e \texttt{sbrk}}  
 \label{sec:proc_mem_sbrk}
@@ -672,7 +684,7 @@ che pu
 
 Il controllo del flusso di un programma in genere viene effettuato con le
 varie istruzioni del linguaggio C, la più bistrattata delle quali è il
 
 Il controllo del flusso di un programma in genere viene effettuato con le
 varie istruzioni del linguaggio C, la più bistrattata delle quali è il
-\texttt{goto} ampiamente deprecato in favore di costrutti più puliti; esiste
+\texttt{goto}, ampiamente deprecato in favore di costrutti più puliti; esiste
 però un caso in l'uso di questa istruzione porta all'implementazione più
 efficiente, quello dell'uscita in caso di errore.
 
 però un caso in l'uso di questa istruzione porta all'implementazione più
 efficiente, quello dell'uscita in caso di errore.
 
@@ -820,7 +832,7 @@ versione estesa di \texttt{getopt}.
 Oltre ai parametri passati da linea di comando ogni processo riceve dal
 sistema un \textsl{ambiente}, nella forma di una lista di variabili
 (\textit{environment list}) messa a disposizione dal processo costruita nella
 Oltre ai parametri passati da linea di comando ogni processo riceve dal
 sistema un \textsl{ambiente}, nella forma di una lista di variabili
 (\textit{environment list}) messa a disposizione dal processo costruita nella
-chiamata ad \finc{exec} che lo ha lanciato.
+chiamata ad \func{exec} che lo ha lanciato.
 
 Come per la lista dei parametri anche questa lista è un array di puntatori a
 caratteri, ciascuno dei quali punta ad una stringa (terminata da un null). A
 
 Come per la lista dei parametri anche questa lista è un array di puntatori a
 caratteri, ciascuno dei quali punta ad una stringa (terminata da un null). A
@@ -838,7 +850,7 @@ un esempio del contenuto dell'ambiente, in si 
 variabili che normalmente sono definite dal sistema, è riportato in \nfig.
 \begin{figure}[htb]
   \centering
 variabili che normalmente sono definite dal sistema, è riportato in \nfig.
 \begin{figure}[htb]
   \centering
-  \includegraphics[width=7cm]{img/environ_var.eps}
+  \includegraphics[width=11cm]{img/environ_var.eps}
   \caption{Esempio di lista delle variabili di ambiente.}
   \label{fig:proc_envirno_list}
 \end{figure}
   \caption{Esempio di lista delle variabili di ambiente.}
   \label{fig:proc_envirno_list}
 \end{figure}
@@ -865,3 +877,5 @@ Gli standard POSIX e XPG3 definiscono alcune di queste variabili (le pi
 comuni), come riportato in \ntab. GNU/Linux le supporta tutte e ne definisce
 anche altre per una lista parziale si può controllare \cmd{man environ}
 
 comuni), come riportato in \ntab. GNU/Linux le supporta tutte e ne definisce
 anche altre per una lista parziale si può controllare \cmd{man environ}
 
+
+