X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=process.tex;h=2bde8679e5846caf82025b3b789e35b8e7a9a36a;hp=0c94547a6e9c0aa82692d910d16b1785aaccc17c;hb=73d2d858e297b733923773d287b0079df449f044;hpb=a93a0bac951085a52c4b33c42a607fc81f6868d2 diff --git a/process.tex b/process.tex index 0c94547..2bde867 100644 --- a/process.tex +++ b/process.tex @@ -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