X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=prochand.tex;h=abe6f477066509608cc93081249bdbf63879eaf3;hb=70885537614fe3332312bc9e9fcd900e04f22451;hp=933a828953f83680f93e3dc970ea7877f106e4af;hpb=08c289c4acd775aabeb5beeb7b08566969e11d9b;p=gapil.git diff --git a/prochand.tex b/prochand.tex index 933a828..abe6f47 100644 --- a/prochand.tex +++ b/prochand.tex @@ -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,7 +232,7 @@ 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 @@ -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 @@ -1419,7 +1420,10 @@ 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,12 +1514,12 @@ 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. @@ -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}); @@ -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