X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=prochand.tex;h=d476db8c3ea5ccdfc18d719bcb76b7f50b23cd01;hp=f5decd7429d5e028e978b0980fef1d5961f26f57;hb=645d4b1cd40dae38150acba000c434636f89e862;hpb=b6d559b9429afcc0d64137913e8f16d49857a6c9 diff --git a/prochand.tex b/prochand.tex index f5decd7..d476db8 100644 --- a/prochand.tex +++ b/prochand.tex @@ -196,7 +196,7 @@ ottenuti da programma usando le funzioni: Entrambe le funzioni non riportano condizioni di errore. \end{functions} -esempi dell'uso di queste funzioni sono riportati in +\noindent esempi dell'uso di queste funzioni sono riportati in \figref{fig:proc_fork_code}, nel programma di esempio \file{ForkTest.c}. Il fatto che il \acr{pid} sia un numero univoco per il sistema lo rende il @@ -537,7 +537,8 @@ Oltre ai file aperti i processi figli ereditano dal padre una serie di altre proprietà; la lista dettagliata delle proprietà che padre e figlio hanno in comune dopo l'esecuzione di una \func{fork} è la seguente: \begin{itemize*} -\item i file aperti e gli eventuali flag di \textit{close-on-exec} se settati. +\item i file aperti e gli eventuali flag di \textit{close-on-exec} (vedi +\secref{sec:proc_exec} e \secref{sec:file_fcntl}) se settati. \item gli identificatori per il controllo di accesso: il \textit{real user id}, il \textit{real group id}, l'\textit{effective user id}, l'\textit{effective group id} e i \textit{supplementary group id} (vedi @@ -549,9 +550,11 @@ comune dopo l'esecuzione di una \func{fork} \item la directory di lavoro e la directory radice (vedi \secref{sec:file_work_dir}). \item la maschera dei permessi di creazione (vedi \secref{sec:file_umask}). -\item la maschera dei segnali bloccati e le azioni installate. -\item i segmenti di memoria condivisa agganciati al processo. -\item i limiti sulle risorse. +\item la maschera dei segnali bloccati e le azioni installate (vedi +\secref{sec:sig_xxx}). +\item i segmenti di memoria condivisa agganciati al processo (vedi +\secref{sec:ipc_xxx}). +\item i limiti sulle risorse (vedi \secref{sec:sys_xxx}). \item le variabili di ambiente (vedi \secref{sec:proc_environ}). \end{itemize*} le differenze fra padre e figlio dopo la \func{fork} invece sono: @@ -562,8 +565,8 @@ le differenze fra padre e figlio dopo la \func{fork} invece sono: \acr{pid} del padre). \item i valori dei tempi di esecuzione (\var{tms\_utime}, \var{tms\_stime}, \var{tms\_cutime}, \var{tms\_uetime}) che nel figlio sono posti a zero. -\item i \textit{file lock}, che non vengono ereditati dal figlio. -\item gli allarmi ed i segnali pendenti, che per il figlio vengono cancellati. +\item i \textit{file lock} (vedi \secref{sec:file_locking}, che non vengono ereditati dal figlio. +\item gli allarmi ed i segnali pendenti (vedi \secref{sec:sig_xxx}), che per il figlio vengono cancellati. \end{itemize*} @@ -1135,7 +1138,7 @@ indicato dal parametro \var{path}, che viene interpretato come il \begin{figure}[htb] \centering - \includegraphics[width=13cm]{img/exec_rel.eps} + \includegraphics[width=13cm]{img/exec_rel} \caption{La interrelazione fra le sei funzioni della famiglia \func{exec}} \label{fig:proc_exec_relat} \end{figure} @@ -1331,8 +1334,7 @@ possono essere letti dal processo attraverso delle opportune funzioni, i cui prototipi sono i seguenti: \begin{functions} \headdecl{unistd.h} - \headdecl{sys/types.h} - + \headdecl{sys/types.h} \funcdecl{uid\_t getuid(void)} restituisce il \textit{real user ID} del processo corrente. @@ -1345,7 +1347,7 @@ prototipi sono i seguenti: \funcdecl{gid\_t getegid(void)} restituisce l'\textit{effective group ID} del processo corrente. - Queste funzioni non riportano condizioni di errore. + \noindent Queste funzioni non riportano condizioni di errore. \end{functions} In generale l'uso di privilegi superiori deve essere limitato il più @@ -1690,11 +1692,11 @@ non possono essere interrotte (o subire interferenze pericolose) da altri processi. Nel caso dei segnali invece la situazione è molto più delicata, in quanto lo -stesso processo può essere interrotto in qualunque momento, e le operazioni di -un eventuale \textit{signal handler} saranno compiute nello stesso spazio di -indirizzi. Per questo anche solo il solo accesso o l'assegnazione di una -variabile possono non essere più operazioni atomiche (torneremo su questi -aspetti in \secref{sec:sign_xxx}). +stesso processo, e pure alcune system call, possono essere interrotti in +qualunque momento, e le operazioni di un eventuale \textit{signal handler} +sono compiute nello stesso spazio di indirizzi del processo. Per questo anche +solo il solo accesso o l'assegnazione di una variabile possono non essere più +operazioni atomiche (torneremo su questi aspetti in \secref{sec:sign_xxx}). In questo caso il sistema provvede un tipo di dato, il \type{sig\_atomic\_t}, il cui accesso è assicurato essere atomico. In pratica comunque si può @@ -1728,9 +1730,9 @@ condivise siano opportunamente protette da meccanismi di sincronizzazione Un caso particolare di \textit{race condition} sono poi i cosiddetti \textit{deadlock}; l'esempio tipico è quello di un flag di ``occupazione'' che viene rilasciato da un evento asincrono fra il controllo (in cui viene trovato -occupato) e la successiva messa in attesa, attesa che a questo punto diventerà +occupato) e la successiva messa in attesa, che a questo punto diventerà perpetua (da cui il nome di \textit{deadlock}) in quanto l'evento di sblocco -di questa è stato perso. +del flag è stato perso fra il controllo e la messa in attesa. \subsection{Le funzioni rientranti}