X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=prochand.tex;h=d476db8c3ea5ccdfc18d719bcb76b7f50b23cd01;hp=699b0407c3ac4a6d16be73e283cb9fe130a8da4b;hb=645d4b1cd40dae38150acba000c434636f89e862;hpb=88fefd4ca97449596a2b8689e89de5e66d9d6758 diff --git a/prochand.tex b/prochand.tex index 699b040..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 @@ -210,7 +210,7 @@ Tutti i processi figli dello stesso processo padre sono detti \textit{sibling}, questa è una delle relazioni usate nel \textsl{controllo di sessione}, in cui si raggruppano i processi creati su uno stesso terminale, o relativi allo stesso login. Torneremo su questo argomento in dettaglio in -\secref{cap:session}, dove esamineremo gli altri identificativi associati ad +\secref{cha:session}, dove esamineremo gli altri identificativi associati ad un processo e le varie relazioni fra processi utilizzate per definire una sessione. @@ -219,7 +219,7 @@ sessione, ad ogni processo sono associati altri identificatori, usati per il controllo di accesso, che servono per determinare se il processo può o meno eseguire le operazioni richieste, a seconda dei privilegi e dell'identità di chi lo ha posto in esecuzione; su questi torneremo in dettagli più avanti in -\secref{sec:proc_perm}. +\secref{sec:proc_perms}. \subsection{La funzione \func{fork}} @@ -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} @@ -1164,24 +1167,24 @@ la lista completa \secref{sec:file_work_dir}). \item la maschera di creazione dei file (\var{umask}, vedi \secref{sec:file_umask}) ed i \textit{lock} sui file (vedi - \secref{sec:file_xxx}). + \secref{sec:file_locking}). \item i segnali sospesi (\textit{pending}) e la maschera dei segnali (si veda \secref{sec:sig_xxx}). -\item i limiti sulle risorse (vedi \secref{sec:limits_xxx}).. +\item i limiti sulle risorse (vedi \secref{sec:sys_limits}).. \item i valori delle variabili \var{tms\_utime}, \var{tms\_stime}, - \var{tms\_cutime}, \var{tms\_ustime} (vedi \secref{sec:xxx_xxx}).. + \var{tms\_cutime}, \var{tms\_ustime} (vedi \secref{sec:xxx_xxx}). \end{itemize*} Oltre a questo i segnali che sono stati settati per essere ignorati nel -processo chiamante mantengono lo stesso settaggio pure nuovo programma, tutti -gli altri segnali vengono settati alla loro azione di default. Un caso -speciale è il segnale \macro{SIGCHLD} che, quando settato a \macro{SIG\_IGN} +processo chiamante mantengono lo stesso settaggio pure nel nuovo programma, +tutti gli altri segnali vengono settati alla loro azione di default. Un caso +speciale è il segnale \macro{SIGCHLD} che, quando settato a \macro{SIG\_IGN}, può anche non essere resettato a \macro{SIG\_DFL} (si veda \secref{sec:sig_xxx}). La gestione dei file aperti dipende dal valore del flag di \textit{close-on-exec} per ciascun file descriptor (si veda -\secref{sec:file_xxx}); i file per cui è settato vengono chiusi, tutti gli +\secref{sec:file_fcntl}); i file per cui è settato vengono chiusi, tutti gli altri file restano aperti. Questo significa che il comportamento di default è che i file restano aperti attraverso una \func{exec}, a meno di una chiamata esplicita a \func{fcntl} che setti il suddetto flag. @@ -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ù @@ -1682,7 +1684,7 @@ cui non erano ancora state completate. Nel caso dell'interazione fra processi la situazione è molto più semplice, ed occorre preoccuparsi della atomicità delle operazioni solo quando si ha a che fare con meccanismi di intercomunicazione (che esamineremo in dettaglio in -\capref{cha:ipc}) o nella operazioni con i file (vedremo alcuni esempi in +\capref{cha:IPC}) o nella operazioni con i file (vedremo alcuni esempi in \secref{sec:file_atomic}). In questi casi in genere l'uso delle appropriate funzioni di libreria per compiere le operazioni necessarie è garanzia sufficiente di atomicità in quanto le system call con cui esse sono realizzate @@ -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}