X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=prochand.tex;h=6045b5a992bd18bdc434fe57e61ffb0dbc542f52;hp=af296b67fbc4b95cd31a644546ce4efa96636c0f;hb=4e1da5b259a86278710be32441de7b88b9287ec1;hpb=f8d990a1b2a184dba66301ae20d1f7e8f300c139 diff --git a/prochand.tex b/prochand.tex index af296b6..6045b5a 100644 --- a/prochand.tex +++ b/prochand.tex @@ -136,9 +136,8 @@ struttura delle principali informazioni contenute nella \struct{task\_struct} (che in seguito incontreremo a più riprese), è mostrato in fig.~\ref{fig:proc_task_struct}. -\begin{figure}[htb] - \centering - \includegraphics[width=14cm]{img/task_struct} +\begin{figure}[!htb] + \centering \includegraphics[width=14cm]{img/task_struct} \caption{Schema semplificato dell'architettura delle strutture usate dal kernel nella gestione dei processi.} \label{fig:proc_task_struct} @@ -372,9 +371,9 @@ sempre un solo padre (il cui \acr{pid} può sempre essere ottenuto con \func{getppid}, vedi sez.~\ref{sec:proc_pid}) per cui si usa il valore nullo, che non è il \acr{pid} di nessun processo. -\begin{figure}[!htb] +\begin{figure}[!htbp] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\codesamplewidth} \includecodesample{listati/ForkTest.c} \end{minipage} \normalsize @@ -1002,9 +1001,10 @@ sez.~\ref{sec:thread_xxx}). \const{WCONTINUED}& Ritorna anche quando un processo figlio che era stato fermato ha ripreso l'esecuzione.\footnotemark \\ \hline - \const{\_\_WCLONE}& Attende solo per i figli creati con \func{clone}, - vale a dire processi che non emettono nessun segnale - o emettono un segnale diverso da \const{SIGCHL} alla + \const{\_\_WCLONE}& Attende solo per i figli creati con \func{clone} + (vedi sez.~\ref{sec:process_clone}), vale a dire + processi che non emettono nessun segnale + o emettono un segnale diverso da \const{SIGCHLD} alla terminazione. \\ \const{\_\_WALL} & Attende per qualunque processo figlio. \\ \const{\_\_WNOTHREAD}& Non attende per i figli di altri \textit{thread} @@ -1455,9 +1455,8 @@ 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. -\begin{figure}[htb] - \centering - \includegraphics[width=12cm]{img/exec_rel} +\begin{figure}[!htb] + \centering \includegraphics[width=12cm]{img/exec_rel} \caption{La interrelazione fra le sei funzioni della famiglia \func{exec}.} \label{fig:proc_exec_relat} \end{figure} @@ -2693,9 +2692,9 @@ priorità statica da assegnare al processo; lo standard prevede che questo debba essere assegnato all'interno di un intervallo fra un massimo ed un minimo che nel caso di Linux sono rispettivamente 1 e 99. -\begin{figure}[!bht] +\begin{figure}[!htbp] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\textwidth} \includestruct{listati/sched_param.c} \end{minipage} \normalsize @@ -3401,8 +3400,50 @@ visto in sez.~\ref{sec:intro_syscall}.\footnote{ed inoltre per questa } \end{functions} +La funzione prende come primo argomento il puntatore alla funzione che verrà +messa in esecuzione nel nuovo processo, che può avere un unico argomento di +tipo puntatore a \ctyp{void}, il cui valore viene passato dal terzo +argomento \param{arg}; per quanto il precedente prototipo possa intimidire +nella sua espressione, in realtà l'uso è molto semplice basterà definire una +qualunque funzione \param{fn} del tipo indicato, e \code{fn(arg)} sarà +eseguita in un nuovo processo. + +Il nuovo processo resterà in esecuzione fintanto che la funzione \param{fn} +non ritorna, o esegue \func{exit} o viene terminata da un segnale. Il valore +di ritorno della funzione (o quello specificato con \func{exit}) verrà +utilizzato come stato di uscita della funzione. +I tre argomenti \param{ptid}, \param{tls} e \param{ctid} sono opzionali e sono +presenti solo a partire dal kernel 2.6. +Il comportamento di \func{clone}, che si riflette sulle caratteristiche del +nuovo processo da essa creato, è controllato dall'argomento \param{flags}, + +\begin{basedescript}{\desclabelstyle{\pushlabel}} + +\item[\const{CLONE\_CHILD\_CLEARTID}] +\item[\const{CLONE\_CHILD\_SETTID}] +\item[\const{CLONE\_FILES}] +\item[\const{CLONE\_FS}] +\item[\const{CLONE\_IO}] +\item[\const{CLONE\_NEWIPC}] +\item[\const{CLONE\_NEWNET}] +\item[\const{CLONE\_NEWNS}] +\item[\const{CLONE\_NEWPID}] +\item[\const{CLONE\_NEWUTS}] +\item[\const{CLONE\_PARENT}] +\item[\const{CLONE\_PARENT\_SETTID}] +\item[\const{CLONE\_PID}] +\item[\const{CLONE\_PTRACE}] +\item[\const{CLONE\_SETTLS}] +\item[\const{CLONE\_SIGHAND}] +\item[\const{CLONE\_STOPPED}] +\item[\const{CLONE\_SYSVSEM}] +\item[\const{CLONE\_THREAD}] +\item[\const{CLONE\_UNTRACED}] +\item[\const{CLONE\_VFORK}] +\item[\const{CLONE\_VM}] +\end{basedescript} \subsection{La funzione \func{prctl}} @@ -3687,6 +3728,9 @@ predefinite del seguente elenco, che illustra quelle disponibili al momento: Da fare +% TODO: trattare PTRACE_SEIZE, aggiunta con il kernel 3.1 + + \subsection{L'accesso alle porte di I/O} \label{sec:process_io_port} @@ -3910,7 +3954,7 @@ varie funzioni di libreria, che sono identificate aggiungendo il suffisso % LocalWords: SIGKILL static RLIMIT preemption PREEMPT VOLUNTARY IDLE RTPRIO % LocalWords: completely fair compat uniform CFQ queuing elevator dev cfq RT % LocalWords: documentation block syscall ioprio IPRIO CLASS class best effort -% LocalWords: refresh semop dnotify MADV DONTFORK prctl WCLONE SIGCHL WALL big +% LocalWords: refresh semop dnotify MADV DONTFORK prctl WCLONE WALL big % LocalWords: WNOTHREAD DUMPABLE KEEPCAPS IRIX CAPBSET endianess endian flags % LocalWords: little PPC PowerPC FPEMU NOPRINT SIGFPE FPEXC point FP SW malloc % LocalWords: exception EXC ENABLE OVF overflow UND underflow RES INV DISABLED