Rinominati app_a e app_b
[gapil.git] / prochand.tex
index 390b072421612d0dfc58ab281037f65ccd7f9768..72fcc78465a6c5d57d9da2b07afbaf38adfe4245 100644 (file)
@@ -12,7 +12,7 @@ funzioni a questo connesse.
 
 
 \section{Una panoramica sui concetti base}
 
 
 \section{Una panoramica sui concetti base}
-\label{sec:proc_gen}
+\label{sec:prochand_gen}
 
 Una delle caratteristiche essenziali di unix (che esamineremo in dettaglio più
 avanti) è che ogni processo può a sua volta generare altri processi figli
 
 Una delle caratteristiche essenziali di unix (che esamineremo in dettaglio più
 avanti) è che ogni processo può a sua volta generare altri processi figli
@@ -31,7 +31,7 @@ questo caso c'
 
 
 \section{Gli identificatori dei processi}
 
 
 \section{Gli identificatori dei processi}
-\label{sec:proc_id}
+\label{sec:prochand_id}
 
 Ogni processo viene identificato dal sistema da un numero identificativo
 unico, il \textit{process id} o \textit{pid}. Questo viene assegnato in forma
 
 Ogni processo viene identificato dal sistema da un numero identificativo
 unico, il \textit{process id} o \textit{pid}. Questo viene assegnato in forma
@@ -41,39 +41,36 @@ arriva a 32767) oltre il quale si riparte dal numero pi
 (FIXME: verificare, non sono sicuro).  Per questo motivo processo il processo
 di avvio (init) ha sempre il pid uguale a uno.
 
 (FIXME: verificare, non sono sicuro).  Per questo motivo processo il processo
 di avvio (init) ha sempre il pid uguale a uno.
 
-Ogni processo è identificato univocamente dal sistema per il suo
-pid; quest'ultimo è un apposito tipo di dato, il \texttt{pid\_t} che in
-genere è un intero con segno (nel caso di Linux e delle glibc il tipo usato è
+Ogni processo è identificato univocamente dal sistema per il suo pid;
+quest'ultimo è un tipo di dato standard, il \texttt{pid\_t} che in genere è un
+intero con segno (nel caso di Linux e delle glibc il tipo usato è
 \texttt{int}.
 
 Tutti i processi inoltre portano traccia del pid del genitore, chiamato in
 genere \textit{ppid} (da \textit{Parente Process Id}). Questi identificativi
 possono essere ottenuti da un programma usando le funzioni:
 \texttt{int}.
 
 Tutti i processi inoltre portano traccia del pid del genitore, chiamato in
 genere \textit{ppid} (da \textit{Parente Process Id}). Questi identificativi
 possono essere ottenuti da un programma usando le funzioni:
-\begin{itemize} 
-  \item \texttt{pid\_t getpid(void)} restituisce il pid del processo corrente.
-    
-  \item \texttt{pid\_t getppid(void)} restituisce il pid del padre del processo
+\begin{functions}
+\headdecl{sys/types.h}
+\headdecl{unistd.h}
+\funcdecl{pid\_t getpid(void)} restituisce il pid del processo corrente.
+\funcdecl{pid\_t getppid(void)} restituisce il pid del padre del processo
     corrente.
     corrente.
-
-\end{itemize}
-(per l'accesso a queste funzioni e ai relativi tipi di dati occorre includere
-gli header files \texttt{unistd.h} e \texttt{sys/types.h}). 
-
+\end{functions}
 
 
 \section{Il controllo dei processi}
 
 
 \section{Il controllo dei processi}
-\label{sec:proc_control}
+\label{sec:prochand_control}
 
 Esamineremo in questa sezione le varie funzioni per il controllo dei processi:
 
 Esamineremo in questa sezione le varie funzioni per il controllo dei processi:
-la lore creazione, la terminazione, l'esecuzione di altri programmi. Prima di
+la loro creazione, la terminazione, l'esecuzione di altri programmi. Prima di
 trattare in dettaglio le singole funzioni, faremo un'introduzione generale ai
 trattare in dettaglio le singole funzioni, faremo un'introduzione generale ai
-contetti che stanno alla base della gestione dei processi in unix.
+concetti che stanno alla base della gestione dei processi in unix.
 
 \subsection{Una panoramica}
 
 \subsection{Una panoramica}
-\label{sec:proc_control_overview}
+\label{sec:prochand_control_overview}
 
 I processi vengono creati dalla funzione \texttt{fork}; in genere questa è una
 
 I processi vengono creati dalla funzione \texttt{fork}; in genere questa è una
-system call, ma linux però usa un'altra nomenclatura, e la funzione fork è
+system call, ma Linux però usa un'altra nomenclatura, e la funzione fork è
 basata a sua volta sulla system call \texttt{clone}, che viene usata anche per
 generare i \textit{thread}.  Il processo figlio creato dalla \textit{fork} è
 una copia identica del processo processo padre, solo che ha un suo pid
 basata a sua volta sulla system call \texttt{clone}, che viene usata anche per
 generare i \textit{thread}.  Il processo figlio creato dalla \textit{fork} è
 una copia identica del processo processo padre, solo che ha un suo pid
@@ -86,34 +83,36 @@ una informazione abbastanza limitata (il codice di uscita) sulle cause della
 terminazione del processo.
 
 Quando un processo ha concluso il suo compito o ha incontrato un errore non
 terminazione del processo.
 
 Quando un processo ha concluso il suo compito o ha incontrato un errore non
-risolvibile esso può essere terminato con la funzione \texttt{exit} (la
-questione è più complessa ma ci torneremo più avanti). La vita del processo
+risolvibile esso può essere terminato con la funzione \texttt{exit} (si veda
+quanto discusso in \secref{sec:proc_termination}). La vita del processo
 però termina solo quando viene chiamata la quando la sua conclusione viene
 ricevuta dal processo padre, a quel punto tutte le risorse allocate nel
 sistema ad esso associate vengono rilasciate.
 
 Avere due processi che eseguono esattamente lo stesso codice non è molto
 però termina solo quando viene chiamata la quando la sua conclusione viene
 ricevuta dal processo padre, a quel punto tutte le risorse allocate nel
 sistema ad esso associate vengono rilasciate.
 
 Avere due processi che eseguono esattamente lo stesso codice non è molto
-utile, mormalmente si genera un secondo processo per affidagli l'esecuzione di
+utile, normalmente si genera un secondo processo per affidargli l'esecuzione di
 un compito specifico (ad esempio gestire una connessione dopo che questa è
 stata stabilita), o fargli eseguire (come fa la shell) un altro programma. Per
 questo si usa la seconda funzione fondamentale per programmazione coi processi
 che è la \texttt{exec}.
 
 Il programma che un processo sta eseguendo si chiama immagine del processo
 un compito specifico (ad esempio gestire una connessione dopo che questa è
 stata stabilita), o fargli eseguire (come fa la shell) un altro programma. Per
 questo si usa la seconda funzione fondamentale per programmazione coi processi
 che è la \texttt{exec}.
 
 Il programma che un processo sta eseguendo si chiama immagine del processo
-(\textit{process image}), le funzioni della famiglia \textit{exec} permettono
+(\textit{process image}), le funzioni della famiglia \func{exec} permettono
 di caricare un'altro programma da disco sostituendo quest'ultimo alla process
 image corrente, questo fa si che la precedente immagine venga completamente
 cancellata e quando il nuovo programma esce anche il processo termina, senza
 ritornare alla precedente immagine.
 
 di caricare un'altro programma da disco sostituendo quest'ultimo alla process
 image corrente, questo fa si che la precedente immagine venga completamente
 cancellata e quando il nuovo programma esce anche il processo termina, senza
 ritornare alla precedente immagine.
 
-Per questo motivo la \texttt{fork} e la \texttt{exec} sono funzioni molto
+Per questo motivo la \func{fork} e la \func{exec} sono funzioni molto
 particolari con caratteristiche uniche rispetto a tutte le altre, infatti la
 prima ritorna due volte (nel processo padre e nel figlio) mentre la seconda
 non ritorna mai (in quanto con essa viene eseguito un altro programma).
 
 
 particolari con caratteristiche uniche rispetto a tutte le altre, infatti la
 prima ritorna due volte (nel processo padre e nel figlio) mentre la seconda
 non ritorna mai (in quanto con essa viene eseguito un altro programma).
 
 
-\subsection{La funzione \texttt{fork}}
-\label{sec:proc_fork}
+\subsection{La funzione \func{fork}}
+\label{sec:prochand_fork}
+
+La funzione \func{fork} 
 
 
 Dopo l'esecuzione di una fork sia il processo padre che il processo figlio
 
 
 Dopo l'esecuzione di una fork sia il processo padre che il processo figlio
@@ -127,29 +126,24 @@ viene eseguito dal padre o dal figlio.
 
 
 \subsection{Le funzioni \texttt{wait} e  \texttt{waitpid}}
 
 
 \subsection{Le funzioni \texttt{wait} e  \texttt{waitpid}}
-\label{sec:proc_wait}
+\label{sec:prochand_wait}
 
 \subsection{Le funzioni \texttt{exec}}
 
 \subsection{Le funzioni \texttt{exec}}
-\label{sec:proc_exec}
-
-
+\label{sec:prochand_exec}
 
 
 
 
 \section{Il controllo di accesso}
 
 
 
 
 \section{Il controllo di accesso}
-\label{sec:process_perms}
+\label{sec:prochand_perms}
 
 Va messo qui tutta la storia su effective, real, saved uid, e pure le cose di
 
 Va messo qui tutta la storia su effective, real, saved uid, e pure le cose di
-linux come il filesystem uid.
-
+Linux come il filesystem uid.
 
 \subsection{Le funzioni \texttt{setuid} e \texttt{setgid}}
 
 \subsection{Le funzioni \texttt{setuid} e \texttt{setgid}}
-\label{sec:proc_setuid}
+\label{sec:prochand_setuid}
 
 
 \subsection{Le funzioni \texttt{seteuid} e \texttt{setegid}}
 
 
 \subsection{Le funzioni \texttt{seteuid} e \texttt{setegid}}
-\label{sec:proc_setuid}
-
-
+\label{sec:prochand_seteuid}