Aggiunte su fork
authorSimone Piccardi <piccardi@gnulinux.it>
Mon, 3 Sep 2001 21:31:39 +0000 (21:31 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Mon, 3 Sep 2001 21:31:39 +0000 (21:31 +0000)
prochand.tex

index 3ddfa4b0b23506451daaeb750afdcfe8ffd3fb64..b9cd6a7f653a70b2f819d52574d5e45983fcbb74 100644 (file)
@@ -192,17 +192,35 @@ della funzione 
 \end{functions}
 
 Dopo l'esecuzione di una \func{fork} sia il processo padre che il processo
-figlio continuano ad essere eseguiti normalmente, ed il processo figlio esegue
-esattamente lo stesso codice del padre. La sola differenza è che nel processo
-padre il valore di ritorno della funzione fork è il \acr{pid} del processo
-figlio, mentre nel figlio è zero; in questo modo il programma può identificare
-se viene eseguito dal padre o dal figlio.
+figlio continuano ad essere eseguiti normalmente alla istruzione seguente la
+\func{fork}; il processo figlio è però una copia del padre, e riceve una copia
+dei segmenti di testo, stack e dati (vedi \secref{sec:proc_mem_layout}), ed
+esegue esattamente lo stesso codice del padre, ma la memoria è copiata, non
+condivisa\footnote{In generale il segmento di testo, che è identico, è
+  condiviso e tenuto in read-only, linux poi utilizza la tecnica del
+  \textit{copy-on-write}, per cui la memoria degli altri segmenti viene
+  copiata dal kernel per il nuovo processo solo in caso di scrittura, rendendo
+  molto più efficiente il meccanismo} pertanto padre e figlio vedono variabili
+diverse.
+
+La differenza che si ha nei due processi è che nel processo padre il valore di
+ritorno della funzione fork è il \acr{pid} del processo figlio, mentre nel
+figlio è zero; in questo modo il programma può identificare se viene eseguito
+dal padre o dal figlio.
+
+Si noti come la funzione, caso unico che ne contraddistingue l'importanza,
+ritorni \textbf{due} volte. Nel caso del padre viene restituito il \acr{pid}
+del figlio in quanto potendo esservi più figli questo è il modo per poterne
+tracciare la creazione, il figlio invece ha un unico padre (il cui \acr{pid}
+può essere ottenuto con \func{getppid}, vista in \secref{sec:proc_pid}) e si
+usa il valore nullo (che non può essere il \acr{pid} di nessun processo)
 
 
 
 \subsection{Le funzioni \texttt{wait} e  \texttt{waitpid}}
 \label{sec:proc_wait}
 
+
 \subsection{Le funzioni \texttt{exec}}
 \label{sec:proc_exec}