Note per merge su kernel 3.5
[gapil.git] / prochand.tex
index fa6e1d50969b63087422d86a5b12a7a3865e21e7..c4f568faddae210b329defa4d5e3067fe2ed060a 100644 (file)
@@ -157,19 +157,15 @@ in fig.~\ref{fig:proc_task_struct}.
 
 Come accennato in sez.~\ref{sec:intro_unix_struct} è lo \itindex{scheduler}
 \textit{scheduler} che decide quale processo mettere in esecuzione; esso viene
-eseguito ad ogni \textit{system call} ed ad ogni interrupt e in una serie di
-altre occasioni, ma può essere anche attivato esplicitamente. Il timer di
-sistema provvede comunque a che esso sia invocato periodicamente; generando un
-interrupt periodico secondo la frequenza specificata dalla costante
-\const{HZ},\footnote{fino al kernel 2.4 il valore di \const{HZ} era 100 su
-  tutte le architetture tranne l'alpha, per cui era 1000, nel 2.6 è stato
-  portato a 1000 su tutte; dal 2.6.13 lo si può impostare in fase di
-  compilazione del kernel, con un default di 250 e valori possibili di 100,
-  250, 1000 e dal 2.6.20 anche 300 (che è divisibile per le frequenze di
-  refresh della televisione); occorre fare attenzione a non confondere questo
-  valore con quello dei \itindex{clock~tick} \textit{clock tick} (vedi
-  sez.~\ref{sec:sys_unix_time}).} definita in \file{asm/param.h}, ed il cui
-valore è espresso in Hertz.
+eseguito in occasione di dell'invocazione di ogni \textit{system call} ed per
+ogni interrupt dall'hardware oltre che in una serie di altre occasioni, e può
+essere anche attivato esplicitamente. Il timer di sistema provvede comunque a
+che esso sia invocato periodicamente, generando un interrupt periodico secondo
+una frequenza predeterminata, specificata dalla costante \const{HZ} del kernel
+(torneremo su questo argomento in sez.~\ref{sec:sys_unix_time}), che assicura
+che lo \textit{scheduler} scheduler venga comunque eseguito ad intervalli
+regolari e possa prendere le sue decisioni.
+
 
 A partire dal kernel 2.6.21 è stato introdotto anche un meccanismo
 completamente diverso, detto \textit{tickless}, in cui non c'è più una
@@ -335,9 +331,8 @@ valore nullo, che non è il \ids{PID} di nessun processo.
 Normalmente la chiamata a \func{fork} può fallire solo per due ragioni: o ci
 sono già troppi processi nel sistema, il che di solito è sintomo che
 qualcos'altro non sta andando per il verso giusto, o si è ecceduto il limite
-sul numero totale di processi permessi all'utente argomento su cui torneremo
-in sez.~\ref{sec:sys_resource_limit}, (vedi in particolare
-tab.~\ref{tab:sys_rlimit_values}).
+sul numero totale di processi permessi all'utente, argomento che tratteremo in
+dettaglio in sez.~\ref{sec:sys_resource_limit}.
 
 L'uso di \func{fork} avviene secondo due modalità principali; la prima è
 quella in cui all'interno di un programma si creano processi figli cui viene
@@ -607,7 +602,7 @@ comune dopo l'esecuzione di una \func{fork} è la seguente:
 \begin{itemize*}
 \item i file aperti e gli eventuali flag di \itindex{close-on-exec}
   \textit{close-on-exec} impostati (vedi sez.~\ref{sec:proc_exec} e
-  sez.~\ref{sec:file_fcntl});
+  sez.~\ref{sec:file_fcntl_ioctl});
 \item gli identificatori per il controllo di accesso: l'\textsl{user-ID
     reale}, il \textsl{group-ID reale}, l'\textsl{user-ID effettivo}, il
   \textsl{group-ID effettivo} ed i \textit{group-ID supplementari} (vedi
@@ -619,8 +614,9 @@ comune dopo l'esecuzione di una \func{fork} è la seguente:
   (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
-  azioni installate (vedi sez.~\ref{sec:sig_gen_beha});
+\item la \index{maschera~dei~segnali} maschera dei segnali bloccati (vedi
+  sez.~\ref{sec:sig_sigmask}) e le azioni installate (vedi
+  sez.~\ref{sec:sig_gen_beha});
 \item i segmenti di memoria condivisa agganciati al processo (vedi
   sez.~\ref{sec:ipc_sysv_shm});
 \item i limiti sulle risorse (vedi sez.~\ref{sec:sys_resource_limit});
@@ -1128,9 +1124,10 @@ tradizionalmente gli 8 bit meno significativi sono riservati per memorizzare
 lo \itindex{exit~status} stato di uscita del processo, e gli altri per
 indicare il segnale che ha causato la terminazione (in caso di conclusione
 anomala), uno per indicare se è stato generato un \itindex{core~dump}
-\textit{core dump}, ecc.\footnote{le definizioni esatte si possono trovare in
-  \file{<bits/waitstatus.h>} ma questo file non deve mai essere usato
-  direttamente, esso viene incluso attraverso \file{<sys/wait.h>}.}
+\textit{core dump} (vedi sez.~\ref{sec:sig_standard}), ecc.\footnote{le
+  definizioni esatte si possono trovare in \file{<bits/waitstatus.h>} ma
+  questo file non deve mai essere usato direttamente, esso viene incluso
+  attraverso \file{<sys/wait.h>}.}
 
 \begin{table}[!htb]
   \centering
@@ -1258,7 +1255,7 @@ primo, quale processo o quale gruppo di processi selezionare.
   \label{tab:proc_waitid_idtype}
 \end{table}
 
-Come per \func{waitpid} anche il comportamento di \func{waitid} viene
+Come per \func{waitpid} anche il comportamento di \func{waitid} è
 controllato dall'argomento \param{options}, da specificare come maschera
 binaria dei valori riportati in tab.~\ref{tab:proc_waitid_options}. Benché
 alcuni di questi siano identici come significato ed effetto ai precedenti di
@@ -1319,8 +1316,8 @@ campi:
   \const{CLD\_STOPPED}, \const{CLD\_CONTINUED}, \const{CLD\_TRAPPED} e
   \const{CLD\_DUMPED} a indicare la ragione del ritorno della funzione, il cui
   significato è, nell'ordine: uscita normale, terminazione da segnale,
-  processo fermato, processo riavviato, processo terminato in \textit{core
-    dump}.
+  processo fermato, processo riavviato, processo terminato in
+  \itindex{core~dump} \textit{core dump} (vedi sez.~\ref{sec:sig_standard}).
 \end{basedescript}
 
 Infine Linux, seguendo un'estensione di BSD, supporta altre due funzioni per
@@ -1560,7 +1557,8 @@ seguente:
 % TODO ===========Importante=============
 % TODO questo sotto è incerto, verificare
 % TODO ===========Importante=============
-\item la maschera dei segnali (si veda sez.~\ref{sec:sig_sigmask}).
+\item la \index{maschera~dei~segnali} maschera dei segnali (si veda
+  sez.~\ref{sec:sig_sigmask}). 
 \end{itemize*}
 
 Una serie di proprietà del processo originale, che non avrebbe senso mantenere
@@ -1578,7 +1576,8 @@ seguenti proprietà non vengano preservate:
 \item le mappature dei file in memoria (vedi sez.~\ref{sec:file_memory_map});
 \item i segmenti di memoria condivisa SysV (vedi sez.~\ref{sec:ipc_sysv_shm})
   e POSIX (vedi sez.~\ref{sec:ipc_posix_shm});
-\item i \textit{memory lock} (vedi sez.~\ref{sec:proc_mem_lock});
+\item i \itindex{memory~locking} \textit{memory lock} (vedi
+  sez.~\ref{sec:proc_mem_lock});
 \item le funzioni registrate all'uscita (vedi sez.~\ref{sec:proc_atexit});
 \item i semafori e le code di messaggi POSIX (vedi
   sez.~\ref{sec:ipc_posix_sem} e sez.~\ref{sec:ipc_posix_mq});
@@ -1622,7 +1621,7 @@ nell'esecuzione della funzione \func{exec}, queste sono:
 
 La gestione dei file aperti nel passaggio al nuovo programma lanciato con
 \func{exec} dipende dal valore che ha il flag di \itindex{close-on-exec}
-\textit{close-on-exec} (vedi sez.~\ref{sec:file_fcntl}) per ciascun
+\textit{close-on-exec} (vedi sez.~\ref{sec:file_fcntl_ioctl}) per ciascun
 \textit{file descriptor}. I file per cui è impostato vengono chiusi, tutti gli
 altri file restano aperti. Questo significa che il comportamento predefinito è
 che i file restano aperti attraverso una \func{exec}, a meno di una chiamata
@@ -2154,7 +2153,7 @@ Le ultime funzioni che esamineremo sono quelle che permettono di operare sui
 gruppi supplementari cui un utente può appartenere. Ogni processo può avere
 almeno \const{NGROUPS\_MAX} gruppi supplementari\footnote{il numero massimo di
   gruppi secondari può essere ottenuto con \func{sysconf} (vedi
-  sez.~\ref{sec:sys_sysconf}), leggendo il parametro
+  sez.~\ref{sec:sys_limits}), leggendo il parametro
   \texttt{\_SC\_NGROUPS\_MAX}.} in aggiunta al gruppo primario; questi vengono
 ereditati dal processo padre e possono essere cambiati con queste funzioni.
 
@@ -2574,7 +2573,7 @@ l'utente correnti.
     \hline
     \const{PRIO\_PROCESS} & \type{pid\_t} & processo  \\
     \const{PRIO\_PRGR}    & \type{pid\_t} & \itindex{process~group}
-                                            \textit{process group}  \\ 
+                                            \textit{process group}\\ 
     \const{PRIO\_USER}    & \type{uid\_t} & utente \\
     \hline
   \end{tabular}
@@ -2777,9 +2776,9 @@ corrente.
     \const{SCHED\_OTHER}& \textit{Scheduling} ordinario.\\
     \const{SCHED\_BATCH}& \textit{Scheduling} ordinario con l'assunzione
                           ulteriore di lavoro \textit{CPU
-                            intensive} (dal kernel 2.6.16)\\ 
+                            intensive} (dal kernel 2.6.16).\\ 
     \const{SCHED\_IDLE} & \textit{Scheduling} di priorità estremamente
-                          bassa (dal kernel 2.6.23)\\
+                          bassa (dal kernel 2.6.23).\\
     \hline
   \end{tabular}
   \caption{Valori dell'argomento \param{policy} per la funzione
@@ -2823,7 +2822,7 @@ rispettivamente 1 e 99.
 
 \begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{\textwidth}
+  \begin{minipage}[c]{0.5\textwidth}
     \includestruct{listati/sched_param.c}
   \end{minipage} 
   \normalsize 
@@ -2837,7 +2836,7 @@ errore \errcode{EINVAL}, questo valore infatti non ha niente a che vedere con
 la priorità dinamica determinata dal valore di \textit{nice}, che deve essere
 impostato con le funzioni viste in precedenza.
 
-Lo standard POSIX.1b prevede comunque che l'intervallo dei valori delle
+Lo standard POSIX.1b prevede inoltre che l'intervallo dei valori delle
 priorità statiche possa essere ottenuto con le funzioni di sistema
 \funcd{sched\_get\_priority\_max} e \funcd{sched\_get\_priority\_min}, i cui
 prototipi sono:
@@ -3466,15 +3465,15 @@ della priorità da impostare con l'argomento \param{ioprio} di
     \hline
     \hline
     \macro{IOPRIO\_PRIO\_CLASS}\texttt{(\textit{value})}
-                                & dato il valore di una priorità come
+                                & Dato il valore di una priorità come
                                   restituito da \func{ioprio\_get} estrae il
                                   valore della classe.\\
     \macro{IOPRIO\_PRIO\_DATA}\texttt{(\textit{value})}
-                                & dato il valore di una priorità come
+                                & Dato il valore di una priorità come
                                   restituito da \func{ioprio\_get} estrae il
                                   valore della priorità.\\
     \macro{IOPRIO\_PRIO\_VALUE}\texttt{(\textit{class},\textit{prio})}
-                                & dato un valore di priorità ed una classe
+                                & Dato un valore di priorità ed una classe
                                   ottiene il valore numerico da passare a
                                   \func{ioprio\_set}.\\
     \hline
@@ -3887,6 +3886,19 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   memoria. Tutti gli argomenti non utilizzati (al momento tutti) devono essere
   nulli pena la ricezione di un errore di \errval{EINVAL}. Introdotta a
   partire dal kernel 2.6.32.
+% TODO: verificare questa parte
+\item[\const{PR\_SET\_CHILD\_SUBREAPER}] Imposta il processo indicato con il
+  \ids{PID} specificato da \param{arg2} come nuovo ``\textsl{genitore
+    adottivo}'' per tutti i processi discendenti del chiamante che
+  diventeranno orfani, sostituendo in questo ruolo \cmd{init} (si ricordi
+  quanto illustrato in sez.~\ref{sec:proc_termination}). Introdotta a partire
+  dal kernel 3.4.
+\item[\const{PR\_GET\_CHILD\_SUBREAPER}] Ottiene il \ids{PID} del processo a
+  cui vengono assegnati come figli gli orfani del processo
+  corrente. Introdotta a partire dal kernel 3.4.
+  % TODO documentare PR_SET_SECCOMP introdotto a partire dal kernel 3.5. Vedi:
+  % Documentation/prctl/seccomp_filter.txt
+
 \label{sec:prctl_operation}
 \end{basedescript}
 
@@ -4307,7 +4319,7 @@ aggiungendo il suffisso \code{\_r} al nome della versione normale.
 % LocalWords:  filesystem noexec EPERM suid sgid root nosuid ENOEXEC ENOENT ELF
 % LocalWords:  ETXTBSY EINVAL ELIBBAD BIG EFAULT EIO ENAMETOOLONG ELOOP ENOTDIR
 % LocalWords:  ENFILE EMFILE argc execl path execv execle execlp execvp vector
-% LocalWords:  list environ NULL umask pending utime cutime ustime fcntl linker
+% LocalWords:  list environ NULL umask utime cutime ustime fcntl linker
 % LocalWords:  opendir libc interpreter FreeBSD capabilities mandatory access
 % LocalWords:  control MAC SELinux security modules LSM superuser uid gid saved
 % LocalWords:  effective euid egid dell' fsuid fsgid getuid geteuid getgid SVr