From: Simone Piccardi Date: Wed, 23 May 2001 20:53:36 +0000 (+0000) Subject: Poche aggiunte X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=commitdiff_plain;h=73d2d858e297b733923773d287b0079df449f044;p=gapil.git Poche aggiunte --- diff --git a/process.tex b/process.tex index 88e059d..2bde867 100644 --- a/process.tex +++ b/process.tex @@ -15,9 +15,50 @@ 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_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. + \subsection{} @@ -40,7 +81,7 @@ programma posto in esecuzione. 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} @@ -174,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