Trattazione unont 2 e correzione varie indicizzazioni e
[gapil.git] / prochand.tex
index 933a828953f83680f93e3dc970ea7877f106e4af..cb4c1158992133a4a47229ec592f349e20f79fda 100644 (file)
@@ -1,6 +1,6 @@
 %% prochand.tex
 %%
-%% Copyright (C) 2000-2011 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2012 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -75,7 +75,7 @@ struttura del sistema comunque consente di lanciare al posto di \cmd{init}
 qualunque altro programma, e in casi di emergenza (ad esempio se il file di
 \cmd{init} si fosse corrotto) è ad esempio possibile lanciare una shell al suo
 posto.\footnote{la cosa si fa passando la riga \cmd{init=/bin/sh} come
-  parametro di avvio del kernel, l'argomento è di natura amministrativa e
+  parametro di avvio del kernel, l'argomento è di natura sistemistica e
   trattato in sez.~5.3 di \cite{AGL}.}
 
 \begin{figure}[!htb]
@@ -232,18 +232,18 @@ identificativi possono essere ottenuti usando le due funzioni \funcd{getpid} e
 \end{funcproto}
 
 \noindent esempi dell'uso di queste funzioni sono riportati in
-fig.~\ref{fig:proc_fork_code}, nel programma \file{ForkTest.c}.
+fig.~\ref{fig:proc_fork_code}, nel programma \file{fork\_test.c}.
 
 Il fatto che il \ids{PID} sia un numero univoco per il sistema lo rende un
 candidato per generare ulteriori indicatori associati al processo di cui
 diventa possibile garantire l'unicità: ad esempio in alcune implementazioni la
 funzione \func{tempnam} (si veda sez.~\ref{sec:file_temp_file}) usa il
-\ids{PID} per generare un \itindex{pathname} \textit{pathname} univoco, che
-non potrà essere replicato da un altro processo che usi la stessa
-funzione. Questo utilizzo però può risultare pericoloso, un \ids{PID} infatti
-è univoco solo fintanto che un processo è attivo, una volta terminato esso
-potrà essere riutilizzato da un processo completamente diverso, e di questo
-bisogna essere ben consapevoli.
+\ids{PID} per generare un \textit{pathname} univoco, che non potrà essere
+replicato da un altro processo che usi la stessa funzione. Questo utilizzo
+però può risultare pericoloso, un \ids{PID} infatti è univoco solo fintanto
+che un processo è attivo, una volta terminato esso potrà essere riutilizzato
+da un processo completamente diverso, e di questo bisogna essere ben
+consapevoli.
 
 Tutti i processi figli dello stesso processo padre sono detti
 \textit{sibling}, questa è una delle relazioni usate nel \textsl{controllo di
@@ -370,10 +370,11 @@ del nuovo programma.
 \begin{figure}[!htb]
   \footnotesize \centering
   \begin{minipage}[c]{\codesamplewidth}
-  \includecodesample{listati/ForkTest.c}
+  \includecodesample{listati/fork_test.c}
   \end{minipage}
   \normalsize
-  \caption{Esempio di codice per la creazione di nuovi processi.}
+  \caption{Esempio di codice per la creazione di nuovi processi (da
+    \file{fork\_test.c}).}
   \label{fig:proc_fork_code}
 \end{figure}
 
@@ -384,7 +385,7 @@ specificato da linea di comando, e prende anche alcune opzioni per indicare
 degli eventuali tempi di attesa in secondi (eseguiti tramite la funzione
 \func{sleep}) per il padre ed il figlio (con \cmd{forktest -h} si ottiene la
 descrizione delle opzioni). Il codice completo, compresa la parte che gestisce
-le opzioni a riga di comando, è disponibile nel file \file{ForkTest.c},
+le opzioni a riga di comando, è disponibile nel file \file{fork\_test.c},
 distribuito insieme agli altri sorgenti degli esempi su
 \url{http://gapil.truelite.it/gapil_source.tgz}.
 
@@ -613,8 +614,8 @@ comune dopo l'esecuzione di una \func{fork} è la seguente:
 \item gli identificatori per il controllo di sessione: il
   \itindex{process~group} \textit{process group-ID} e il \textit{session id}
   ed il terminale di controllo (vedi sez.~\ref{sec:sess_proc_group});
-\item la directory di lavoro e la directory radice (vedi
-  sez.~\ref{sec:file_work_dir} e sez.~\ref{sec:file_chroot});
+\item la \index{directory~di~lavoro} directory di lavoro e la directory radice
+  (vedi sez.~\ref{sec:file_work_dir} e sez.~\ref{sec:file_chroot});
 \item la maschera dei permessi di creazione dei file (vedi
   sez.~\ref{sec:file_perm_management});
 \item la maschera dei segnali bloccati (vedi sez.~\ref{sec:sig_sigmask}) e le
@@ -1196,7 +1197,7 @@ da \func{wait} o \func{waitpid}.
 
 Si tenga conto che nel caso di conclusione anomala il valore restituito da
 \val{WTERMSIG} può essere confrontato con le costanti che identificano i
-segnali definite in \file{signal.h} ed elencate in
+segnali definite in \headfile{signal.h} ed elencate in
 tab.~\ref{tab:sig_signal_list}, e stampato usando le apposite funzioni
 trattate in sez.~\ref{sec:sig_strsignal}.
 
@@ -1347,7 +1348,7 @@ La funzione \func{wait4} è identica \func{waitpid} sia nel comportamento che
 per i valori dei primi tre argomenti, ma in più restituisce nell'argomento
 aggiuntivo \param{rusage} un sommario delle risorse usate dal processo. Questo
 argomento è una struttura di tipo \struct{rusage} definita in
-\file{sys/resource.h}, che viene utilizzata anche dalla funzione
+\headfile{sys/resource.h}, che viene utilizzata anche dalla funzione
 \func{getrusage} per ottenere le risorse di sistema usate da un processo. La
 sua definizione è riportata in fig.~\ref{fig:sys_rusage_struct} e ne
 tratteremo in dettaglio il significato sez.~\ref{sec:sys_resource_use}. La
@@ -1391,7 +1392,7 @@ prototipo è:
   \item[\errcode{EACCES}] il file o l'interprete non file ordinari, o non sono
     eseguibili, o il file è su un filesystem montato con l'opzione
     \cmd{noexec}, o manca  il permesso di attraversamento di una delle
-    directory del pathname.
+    directory del \textit{pathname}.
   \item[\errcode{EINVAL}] l'eseguibile ELF ha più di un segmento
     \const{PF\_INTERP}, cioè chiede di essere eseguito da più di un
     interprete.
@@ -1414,12 +1415,15 @@ prototipo è:
 \end{funcproto}
 
 La funzione \func{execve} esegue il programma o lo script indicato dal
-pathname \param{filename}, passandogli la lista di argomenti indicata
+\textit{pathname} \param{filename}, passandogli la lista di argomenti indicata
 da \param{argv} e come ambiente la lista di stringhe indicata
 da \param{envp}. Entrambe le liste devono essere terminate da un puntatore
 nullo. I vettori degli argomenti e dell'ambiente possono essere acceduti dal
 nuovo programma quando la sua funzione \func{main} è dichiarata nella forma
-\code{main(int argc, char *argv[], char *envp[])}.
+\code{main(int argc, char *argv[], char *envp[])}. Si tenga presente per il
+passaggio degli argomenti e dell'ambiente esistono comunque dei limiti, su cui
+torneremo in sez.~\ref{sec:sys_res_limits}).
+% TODO aggiungere la parte sul numero massimo di argomenti, da man execve
 
 In caso di successo la funzione non ritorna, in quanto al posto del programma
 chiamante viene eseguito il nuovo programma indicato da \param{filename}. Se
@@ -1427,8 +1431,6 @@ il processo corrente è tracciato con \func{ptrace} (vedi
 sez.~\ref{sec:process_ptrace}) in caso di successo viene emesso il segnale
 \signal{SIGTRAP}.
 
-% TODO aggiungere la parte sul numero massimo di argomenti, da man execve
-
 Le altre funzioni della famiglia (\funcd{execl}, \funcd{execv},
 \funcd{execle}, \funcd{execlp}, \funcd{execvp}) servono per fornire all'utente
 una serie di possibili diverse interfacce nelle modalità di passaggio degli
@@ -1500,9 +1502,8 @@ che deve essere terminata da un puntatore nullo.  In entrambi i casi vale la
 convenzione che il primo argomento (\var{arg0} o \var{argv[0]}) viene usato
 per indicare il nome del file che contiene il programma che verrà eseguito.
 
-
 \begin{figure}[!htb]
-  \centering \includegraphics[width=12cm]{img/exec_rel}
+  \centering \includegraphics[width=10cm]{img/exec_rel}
   \caption{La interrelazione fra le sei funzioni della famiglia \func{exec}.}
   \label{fig:proc_exec_relat}
 \end{figure}
@@ -1513,15 +1514,15 @@ si indicano le due funzioni che replicano il comportamento della shell nello
 specificare il comando da eseguire; quando l'argomento \param{file} non
 contiene una ``\texttt{/}'' esso viene considerato come un nome di programma,
 e viene eseguita automaticamente una ricerca fra i file presenti nella lista
-di directory specificate dalla variabile di ambiente \var{PATH}. Il file che
-viene posto in esecuzione è il primo che viene trovato. Se si ha un errore
+di directory specificate dalla variabile di ambiente \envvar{PATH}. Il file
+che viene posto in esecuzione è il primo che viene trovato. Se si ha un errore
 relativo a permessi di accesso insufficienti (cioè l'esecuzione della
 sottostante \func{execve} ritorna un \errcode{EACCES}), la ricerca viene
-proseguita nelle eventuali ulteriori directory indicate in \var{PATH}; solo se
-non viene trovato nessun altro file viene finalmente restituito
+proseguita nelle eventuali ulteriori directory indicate in \envvar{PATH}; solo
+se non viene trovato nessun altro file viene finalmente restituito
 \errcode{EACCES}.  Le altre quattro funzioni si limitano invece a cercare di
 eseguire il file indicato dall'argomento \param{path}, che viene interpretato
-come il \itindex{pathname} \textit{pathname} del programma.
+come il \textit{pathname} del programma.
 
 La terza differenza è come viene passata la lista delle variabili di ambiente.
 Con lo mnemonico ``\texttt{e}'' vengono indicate quelle funzioni che
@@ -1540,8 +1541,8 @@ seguente:
   (\ids{PPID});
 \item l'\textsl{user-ID reale}, il \textit{group-ID reale} ed i
   \textsl{group-ID supplementari} (vedi sez.~\ref{sec:proc_access_id});
-\item la directory radice e la directory di lavoro corrente (vedi
-  sez.~\ref{sec:file_work_dir});
+\item la directory radice e la \index{directory~di~lavoro} directory di lavoro
+  corrente (vedi sez.~\ref{sec:file_work_dir});
 \item la maschera di creazione dei file \itindex{umask} (\textit{umask}, vedi
   sez.~\ref{sec:file_perm_management}) ed i \textit{lock} sui file (vedi
   sez.~\ref{sec:file_locking});
@@ -2210,7 +2211,7 @@ chiamata con un vettore di dimensioni adeguate.
 
 Infine per impostare i gruppi supplementari di un processo ci sono due
 funzioni, che possono essere usate solo se si hanno i privilegi di
-amministratore.\footnote{e più precisamente se si ha la \itindex{capability}
+amministratore.\footnote{e più precisamente se si ha la \itindex{capabilities}
   \textit{capability} \macro{CAP\_SETGID}.} La prima delle due è
 \funcd{setgroups},\footnote{la funzione è definita in BSD e SRv4, ma a
   differenza di \func{getgroups} non è stata inclusa in POSIX.1-2001, per
@@ -2550,7 +2551,7 @@ La funzione permette, a seconda di quanto specificato
 nell'argomento \param{which}, di leggere il valore di \textit{nice} di un
 processo, di un gruppo di processi (vedi sez.~\ref{sec:sess_proc_group}) o di
 un utente indicato dall'argomento \param{who}. Nelle vecchie versioni può
-essere necessario includere anche \code{sys/time.h}, questo non è più
+essere necessario includere anche \headfile{sys/time.h}, questo non è più
 necessario con versioni recenti delle librerie, ma è comunque utile per
 portabilità.
 
@@ -2933,7 +2934,7 @@ politica ordinaria essa ha senso soltanto per quelli \textit{real-time}, dato
 che per i primi la priorità statica può essere soltanto nulla.  La
 disponibilità di entrambe le funzioni può essere verificata controllando la
 macro \macro{\_POSIX\_PRIORITY\_SCHEDULING} che è definita nell'\textit{header
-  file} \file{sched.h}.
+  file} \headfile{sched.h}.
 
 Se invece si vuole sapere quale è politica di \textit{scheduling} di un
 processo si può usare la funzione \funcd{sched\_getscheduler}, il cui
@@ -3129,7 +3130,7 @@ forma attuale.\footnote{pertanto se la vostra pagina di manuale non è
   aggiornata, o usate quella particolare versione delle \acr{glibc}, potrete
   trovare indicazioni diverse, il prototipo illustrato è quello riportato
   nella versione corrente (maggio 2008) delle pagine di manuale e
-  corrispondente alla definizione presente in \file{sched.h}.}
+  corrispondente alla definizione presente in \headfile{sched.h}.}
 
 La funzione imposta, con l'uso del valore contenuto all'indirizzo
 \param{mask}, l'insieme dei processori sui quali deve essere eseguito il
@@ -3609,7 +3610,7 @@ l'operazione, e deve essere specificato con l'uso di una delle costanti
 predefinite del seguente elenco, che illustra quelle disponibili al
 momento:\footnote{alla stesura di questa sezione, cioè con il kernel 3.2.}
 
-\begin{basedescript}{\desclabelstyle{\pushlabel}}
+\begin{basedescript}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}}
 \item[\const{PR\_CAPBSET\_READ}] Controlla la disponibilità di una delle
   \itindex{capabilities} \textit{capabilities} (vedi
   sez.~\ref{sec:proc_capabilities}). La funzione ritorna 1 se la capacità
@@ -3758,7 +3759,7 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   \textit{secure computing mode} il processo potrà utilizzare soltanto un
   insieme estremamente limitato di \textit{system call}: \func{read},
   \func{write}, \func{\_exit} e \func{sigreturn}. Ogni altra \textit{system
-    call} porterà all'emissione di un \func{SIGKILL} (vedi
+    call} porterà all'emissione di un \signal{SIGKILL} (vedi
   sez.~\ref{sec:sig_termination}).  Il \textit{secure computing mode} è stato
   ideato per fornire un supporto per l'esecuzione di codice esterno non fidato
   e non verificabile a scopo di calcolo;\footnote{lo scopo è quello di poter
@@ -3775,7 +3776,7 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   funzione è totalmente inutile in quanto l'unico valore ottenibile è 0, dato
   che la chiamata di questa funzione in \itindex{secure~computing~mode}
   \textit{secure computing mode} comporterebbe l'emissione di
-  \texttt{SIGKILL}, è stata comunque definita per eventuali estensioni future.
+  \signal{SIGKILL}, è stata comunque definita per eventuali estensioni future.
   Introdotta a partire dal kernel 2.6.23.
 
 \item[\const{PR\_SET\_SECUREBITS}] Imposta i \itindex{securebits}
@@ -4034,7 +4035,7 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa
   riferimento al momento della stesura di questa sezione, cioè con il kernel
   3.2.}
 
-\begin{basedescript}{\desclabelstyle{\pushlabel}}
+\begin{basedescript}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}}
 
 \item[\const{CLONE\_CHILD\_CLEARTID}] cancella il valore del \ids{TID}
 \item[\const{CLONE\_CHILD\_SETTID}]
@@ -4290,7 +4291,7 @@ aggiungendo il suffisso \code{\_r} al nome della versione normale.
 % LocalWords:  nell'header scheduler system interrupt timer HZ asm Hertz clock
 % LocalWords:  l'alpha tick fork wait waitpid exit exec image glibc int pgid ps
 % LocalWords:  sid thread Ingo Molnar ppid getpid getppid sys unistd LD threads
-% LocalWords:  void ForkTest tempnam pathname sibling cap errno EAGAIN ENOMEM
+% LocalWords:  void tempnam pathname sibling cap errno EAGAIN ENOMEM
 % LocalWords:  stack read only copy write tab client spawn forktest sleep PATH
 % LocalWords:  source LIBRARY scheduling race condition printf descriptor dup
 % LocalWords:  close group session tms lock vfork execve BSD stream main abort
@@ -4345,7 +4346,7 @@ aggiungendo il suffisso \code{\_r} al nome della versione normale.
 % LocalWords:  namespace vsyscall SETTID FILES NEWIPC NEWNET NEWNS NEWPID ptid
 % LocalWords:  NEWUTS SETTLS SIGHAND SYSVSEM UNTRACED tls ctid CLEARTID panic
 % LocalWords:  loader EISDIR SIGTRAP uninterrutible killable EQUAL sizeof XOR
-% LocalWords:  destset srcset ALLOC num cpus setsize emacs
+% LocalWords:  destset srcset ALLOC num cpus setsize emacs pager getty TID
  
 %%% Local Variables: 
 %%% mode: latex