Poche aggiunte
[gapil.git] / process.tex
index 0c94547a6e9c0aa82692d910d16b1785aaccc17c..2bde8679e5846caf82025b3b789e35b8e7a9a36a 100644 (file)
@@ -1,14 +1,63 @@
-\chapter{Il funzionamento di un processo unix}
-\label{cha:process}
+\chapter{L'interfaccia base con i processi}
+\label{cha:process_interface}
 
-Prima di entrare nei dettagli di come un sistema unix gestisce la presenza di
-molti processi concorrenti daremo una descrizione del funzionamento di un
-singolo processo, come viene posto in esecuzione, come viene terminato, come
-vede la memoria e la può gestire, come può ricevere e gestire i parametri.
+Come accennato nell'introduzione il processo è l'unità di base con cui un
+sistema unix alloca ed utilizza le risorse.  Questo capitolo tratterà
+l'interfaccia base fra il sistema e i processi, su come vengono passati i
+parametri, come viene gestita e allocata la memoria, su come un processo può
+richiedere servizi al sistema, su cosa deve fare quando ha finito la sua
+esecuzione.
+
+In genere un programma viene eseguito quando un processo lo fa partire
+eseguendo una funzione della famiglia \texttt{exec}; torneremo su questo e
+sulla la creazione e gestione dei processi nel prossimo capitolo, in questo
+affronteremo l'avvio e il funzionamento di un programma dal punto di vista del
+programma posto in esecuzione.
+
+
+\section{Esecuzione e conclusione di un programma}
+
+Una delle concetti base relativi ai processi è che un processo esegue sempre
+uno ed un solo programma: si possono avere più processi che eseguono lo stesso
+programma ma ciascun processo vedrà la sua copia del codice (in realtà il
+kernel fa si che tutte le parti uguali siano condivise) avrà un suo spazio di
+indirizzi, variabili proprie e sarà eseguito in maniera completamente
+indipendente da tutti gli altri. 
+
+Anche quando all'interno di un programma possono essere presenti più
+\textsl{filoni} di esecuzione (i cosiddetti \textit{thread}), o questo possa
+essere composto da moduli multipli completamente separati, quando questo sarà
+posto in esecuzione esso apparirà al sistema come un solo processo (il
+discorso dei \textit{thread} comunque in linux necessita di una trattazione a
+parte per la peculiarità dell'implementazione).
 
 
 \section{La funzione \texttt{main}} 
-\label{sec:proc_}
+\label{sec:proc_main}
+
+Quando un programma viene lanciato dal kernel viene eseguito il
+programma \texttt{ld-linux.so}, è questo programma che prima carica le
+librerie condivise che servono al programma, effettua il link dinamico del
+codice e poi alla fine lo esegue. La procedura è controllata da alcune
+variabili di ambiente e dai settaggi di 
+
+Il sistema fa partire qualunque programma chiamando la funzione \texttt{main};
+sta al programmatore chiamare così la funzione principale del programma, se
+così non fosse lo stesso linker darebbe luogo ad errori.
+
+Lo stadard ISO C specifica che detta funzione può non avere argomenti o
+prendere due argomenti che rappresentano gli argomenti passati da linea di
+comando, in sostanza un prototipo che va sempre bene è il seguente:
+\begin{verbatim}
+     int main (int argc, char *argv[])
+\end{verbatim}
+
+
+In realtà nei sistemi unix esiste un'altro modo per definire la funzione
+\texttt{main}, che prende un terzo parametro, \texttt{char *envp[]}, che
+fornisce l'ambiente (vedi \secref{proc_environ}) del programma; questa forma
+però non è prevista dallo standard POSIX.1 per cui se si vogliono scrivere
+programmi portabili è meglio evitarla.
 
 
 
@@ -21,13 +70,18 @@ vede la memoria e la pu
 \label{sec:proc_exit}
 
 
+\section{La gestione della memoria}
+\label{sec:proc_mem_manag}
+
+
+
 \section{Gestione di parametri e opzioni}
 \label{sec:parameter_options}
 
 Il passaggio dei parametri e delle variabili di ambiente dalla riga di comando
 al singolo programma quando viene lanciato è effettuato attraverso le
 variabili \texttt{argc}, \texttt{argv} che vengono passate al programma
-come argomenti della funzione principale:
+come argomenti della funzione principale.
 
 \subsection{Il formato dei parametri}
 \label{sec:proc_par_format}
@@ -161,3 +215,6 @@ versione estesa di \texttt{getopt}.
 Questo va fatto.
 
 
+
+\section{La gestione della memoria}
+\label{sec:proc_memory_manag}
\ No newline at end of file