Aggiornamenti + alcune sockopt di IP
[gapil.git] / prochand.tex
index a16a9ae22e9977b8b81f2ea51e5ab0ea779f57c9..62b02a4556d9f72754cf2ce3378461497d803a05 100644 (file)
@@ -1,6 +1,6 @@
 %% prochand.tex
 %%
-%% Copyright (C) 2000-2015 by Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2018 by 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",
@@ -139,14 +139,15 @@ questa tabella, costituita da una struttura \kstruct{task\_struct}, che
 contiene tutte le informazioni rilevanti per quel processo. Tutte le strutture
 usate a questo scopo sono dichiarate nell'\textit{header file}
 \file{linux/sched.h}, ed uno schema semplificato, che riporta la struttura
-delle principali informazioni contenute nella \struct{task\_struct} (che in
+delle principali informazioni contenute nella \texttt{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}
-  \caption{Schema semplificato dell'architettura delle strutture usate dal
-    kernel nella gestione dei processi.}
+  \caption{Schema semplificato dell'architettura delle strutture (
+    \kstructd{task\_struct}, \kstructd{fs\_struct}, \kstructd{file\_struct})
+    usate dal kernel nella gestione dei processi.}
   \label{fig:proc_task_struct}
 \end{figure}
 
@@ -206,10 +207,10 @@ tradizionalmente il \ids{PID} un numero positivo memorizzato in un intero a 16
 bit, arriva ad un massimo di 32768.  Oltre questo valore l'assegnazione
 riparte dal numero più basso disponibile a partire da un minimo di
 300,\footnote{questi valori, fino al kernel 2.4.x, erano definiti dalla macro
-  \const{PID\_MAX} nei file \file{threads.h} e \file{fork.c} dei sorgenti del
+  \constd{PID\_MAX} nei file \file{threads.h} e \file{fork.c} dei sorgenti del
   kernel, con il 2.6.x e la nuova interfaccia per i \textit{thread} anche il
   meccanismo di allocazione dei \ids{PID} è stato modificato ed il valore
-  massimo è impostabile attraverso il file \sysctlfile{kernel/pid\_max} e di
+  massimo è impostabile attraverso il file \sysctlfiled{kernel/pid\_max} e di
   default vale 32768.} che serve a riservare i \ids{PID} più bassi ai processi
 eseguiti direttamente dal kernel.  Per questo motivo, come visto in
 sez.~\ref{sec:proc_hierarchy}, il processo di avvio (\cmd{init}) ha sempre il
@@ -999,12 +1000,12 @@ sono riportate anche le costanti definite per indicare alcuni di essi.
     $<-1$& --               & Attende per un figlio il cui \textit{process
                               group} (vedi sez.~\ref{sec:sess_proc_group}) è
                               uguale al valore assoluto di \param{pid}.\\ 
-    $-1$&\const{WAIT\_ANY}  & Attende per un figlio qualsiasi, usata in
-                              questa maniera senza specificare nessuna opzione
-                              è equivalente a \func{wait}.\\ 
-    $ 0$&\const{WAIT\_MYPGRP}&Attende per un figlio il cui \textit{process
+    $-1$&\constd{WAIT\_ANY}  & Attende per un figlio qualsiasi, usata in
+                               questa maniera senza specificare nessuna opzione
+                               è equivalente a \func{wait}.\\ 
+    $ 0$&\constd{WAIT\_MYPGRP}&Attende per un figlio il cui \textit{process
                                group} (vedi sez.~\ref{sec:sess_proc_group}) è
-                              uguale a quello del processo chiamante.\\ 
+                                uguale a quello del processo chiamante.\\ 
     $>0$& --                & Attende per un figlio il cui \ids{PID} è uguale
                               al valore di \param{pid}.\\
     \hline
@@ -1042,17 +1043,17 @@ sez.~\ref{sec:thread_xxx}).
                         fermato ha ripreso l'esecuzione (disponibile solo a
                         partire dal kernel 2.6.10).\\
     \hline
-    \const{\_\_WCLONE}& Attende solo per i figli creati con \func{clone} 
+    \constd{\_\_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 \signal{SIGCHLD} alla
                         terminazione, il default è attendere soltanto i
                         processi figli ordinari ignorando quelli creati da
                         \func{clone}.\\
-    \const{\_\_WALL}  & Attende per qualunque figlio, sia ordinario che creato
+    \constd{\_\_WALL}  & Attende per qualunque figlio, sia ordinario che creato
                         con  \func{clone}, se specificata insieme a
                         \const{\_\_WCLONE} quest'ultima viene ignorata. \\
-    \const{\_\_WNOTHREAD}& Non attende per i figli di altri \textit{thread}
+    \constd{\_\_WNOTHREAD}& Non attende per i figli di altri \textit{thread}
                         dello stesso \textit{thread group}, questo era il
                         comportamento di default del kernel 2.4 che non
                         supportava la possibilità, divenuta il default a
@@ -1065,6 +1066,7 @@ sez.~\ref{sec:thread_xxx}).
   \label{tab:proc_waitpid_options}
 \end{table}
 
+\constbeg{WNOHANG}
 
 L'uso dell'opzione \const{WNOHANG} consente di prevenire il blocco della
 funzione qualora nessun figlio sia uscito o non si siano verificate le altre
@@ -1072,6 +1074,10 @@ condizioni per l'uscita della funzione. in tal caso. In tal caso la funzione,
 invece di restituire il \ids{PID} del processo (che è sempre un intero
 positivo) ritornerà un valore nullo.
 
+\constend{WNOHANG}
+\constbeg{WUNTRACED}
+\constbeg{WCONTINUED}
+
 Le altre due opzioni, \const{WUNTRACED} e \const{WCONTINUED}, consentono
 rispettivamente di tracciare non la terminazione di un processo, ma il fatto
 che esso sia stato fermato, o fatto ripartire, e sono utilizzate per la
@@ -1088,6 +1094,9 @@ mentre con \const{WCONTINUED} la funzione ritorna quando un processo in stato
 \signal{SIGCONT} (l'uso di questi segnali per il controllo di sessione è
 trattato in sez.~\ref{sec:sess_ctrl_term}).
 
+\constend{WUNTRACED}
+\constend{WCONTINUED}
+
 La terminazione di un processo figlio (così come gli altri eventi osservabili
 con \func{waitpid}) è chiaramente un evento asincrono rispetto all'esecuzione
 di un programma e può avvenire in un qualunque momento. Per questo motivo,
@@ -1148,40 +1157,40 @@ ecc.\footnote{le definizioni esatte si possono trovare in
     \textbf{Macro} & \textbf{Descrizione}\\
     \hline
     \hline
-    \macro{WIFEXITED}\texttt{(s)}   & Condizione vera (valore non nullo) per
+    \macrod{WIFEXITED}\texttt{(s)}   & Condizione vera (valore non nullo) per
                                       un processo figlio che sia terminato
                                       normalmente. \\ 
-    \macro{WEXITSTATUS}\texttt{(s)} & Restituisce gli otto bit meno
+    \macrod{WEXITSTATUS}\texttt{(s)} & Restituisce gli otto bit meno
                                       significativi dello stato di uscita del
                                       processo (passato attraverso
                                       \func{\_exit}, \func{exit} o come valore
                                       di ritorno di \code{main}); può essere
                                       valutata solo se \val{WIFEXITED} ha
                                       restituito un valore non nullo.\\ 
-    \macro{WIFSIGNALED}\texttt{(s)} & Condizione vera se il processo figlio è
+    \macrod{WIFSIGNALED}\texttt{(s)} & Condizione vera se il processo figlio è
                                       terminato in maniera anomala a causa di
                                       un segnale che non è stato catturato
                                       (vedi sez.~\ref{sec:sig_notification}).\\ 
-    \macro{WTERMSIG}\texttt{(s)}    & Restituisce il numero del segnale che ha
+    \macrod{WTERMSIG}\texttt{(s)}    & Restituisce il numero del segnale che ha
                                       causato la terminazione anomala del
                                       processo; può essere valutata solo se
                                       \val{WIFSIGNALED} ha restituito un
                                       valore non nullo.\\
-    \macro{WCOREDUMP}\texttt{(s)}   & Vera se il processo terminato ha
+    \macrod{WCOREDUMP}\texttt{(s)}   & Vera se il processo terminato ha
                                       generato un file di 
                                       \textit{core dump}; può essere valutata
                                       solo se \val{WIFSIGNALED} ha restituito
                                       un valore non nullo.\footnotemark \\
-    \macro{WIFSTOPPED}\texttt{(s)}  & Vera se il processo che ha causato il
+    \macrod{WIFSTOPPED}\texttt{(s)}  & Vera se il processo che ha causato il
                                       ritorno di \func{waitpid} è bloccato;
                                       l'uso è possibile solo con
                                       \func{waitpid} avendo specificato
                                       l'opzione \const{WUNTRACED}.\\
-    \macro{WSTOPSIG}\texttt{(s)}    & Restituisce il numero del segnale che ha
+    \macrod{WSTOPSIG}\texttt{(s)}    & Restituisce il numero del segnale che ha
                                       bloccato il processo; può essere
                                       valutata solo se \val{WIFSTOPPED} ha
                                       restituito un valore non nullo. \\ 
-    \macro{WIFCONTINUED}\texttt{(s)}& Vera se il processo che ha causato il
+    \macrod{WIFCONTINUED}\texttt{(s)}& Vera se il processo che ha causato il
                                       ritorno è stato riavviato da un
                                       \signal{SIGCONT} (disponibile solo a
                                       partire dal kernel 2.6.10).\\
@@ -1249,16 +1258,16 @@ primo, quale processo o quale gruppo di processi selezionare.
     \textbf{Valore} & \textbf{Descrizione}\\
     \hline
     \hline
-    \const{P\_PID} & Indica la richiesta di attendere per un processo figlio
-                     il cui \ids{PID} corrisponda al valore dell'argomento
-                     \param{id}.\\
-    \const{P\_PGID}& Indica la richiesta di attendere per un processo figlio
-                     appartenente al \textit{process group} (vedi
-                     sez.~\ref{sec:sess_proc_group}) il cui \acr{pgid}
-                     corrisponda al valore dell'argomento \param{id}.\\
-    \const{P\_ALL} & Indica la richiesta di attendere per un processo figlio
-                     generico, il valore dell'argomento \param{id} viene
-                     ignorato.\\
+    \constd{P\_PID} & Indica la richiesta di attendere per un processo figlio
+                      il cui \ids{PID} corrisponda al valore dell'argomento
+                      \param{id}.\\
+    \constd{P\_PGID}& Indica la richiesta di attendere per un processo figlio
+                      appartenente al \textit{process group} (vedi
+                      sez.~\ref{sec:sess_proc_group}) il cui \acr{pgid}
+                      corrisponda al valore dell'argomento \param{id}.\\
+    \constd{P\_ALL} & Indica la richiesta di attendere per un processo figlio
+                      generico, il valore dell'argomento \param{id} viene
+                      ignorato.\\
     \hline
   \end{tabular}
   \caption{Costanti per i valori dell'argomento \param{idtype} della funzione
@@ -1286,15 +1295,15 @@ nuovo riceverne lo stato.
     \textbf{Valore} & \textbf{Descrizione}\\
     \hline
     \hline
-    \const{WEXITED}   & Ritorna quando un processo figlio è terminato.\\
-    \const{WNOHANG}   & Ritorna immediatamente anche se non c'è niente da
-                        notificare.\\ 
-    \const{WSTOPPED} &  Ritorna quando un processo figlio è stato fermato.\\
-    \const{WCONTINUED}& Ritorna quando un processo figlio che era stato
-                        fermato ha ripreso l'esecuzione.\\
-    \const{WNOWAIT}   & Lascia il processo ancora in attesa di ricezione, così
-                        che una successiva chiamata possa di nuovo riceverne
-                        lo stato.\\
+    \constd{WEXITED}   & Ritorna quando un processo figlio è terminato.\\
+    \constd{WNOHANG}   & Ritorna immediatamente anche se non c'è niente da
+                         notificare.\\ 
+    \constd{WSTOPPED}  & Ritorna quando un processo figlio è stato fermato.\\
+    \const{WCONTINUED} & Ritorna quando un processo figlio che era stato
+                         fermato ha ripreso l'esecuzione.\\
+    \constd{WNOWAIT}   & Lascia il processo ancora in attesa di ricezione, così
+                         che una successiva chiamata possa di nuovo riceverne
+                         lo stato.\\
     \hline
   \end{tabular}
   \caption{Costanti che identificano i bit dell'argomento \param{options}
@@ -1402,7 +1411,7 @@ prototipo è:
     \cmd{noexec}, o manca  il permesso di attraversamento di una delle
     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
+    \const{PT\_INTERP}, cioè chiede di essere eseguito da più di un
     interprete.
   \item[\errcode{ELIBBAD}] un interprete ELF non è in un formato
     riconoscibile.
@@ -1664,9 +1673,9 @@ del programma per caricare le librerie necessarie ed effettuare il link
 dell'eseguibile; il formato è ormai in completo disuso, per cui è molto
 probabile che non il relativo supporto non sia disponibile. Se il programma è
 in formato ELF per caricare le librerie dinamiche viene usato l'interprete
-indicato nel segmento \const{PT\_INTERP} previsto dal formato stesso, in
-genere questo è \sysfile{/lib/ld-linux.so.1} per programmi collegati con la
-\acr{libc5}, e \sysfile{/lib/ld-linux.so.2} per programmi collegati con la
+indicato nel segmento \constd{PT\_INTERP} previsto dal formato stesso, in
+genere questo è \sysfiled{/lib/ld-linux.so.1} per programmi collegati con la
+\acr{libc5}, e \sysfiled{/lib/ld-linux.so.2} per programmi collegati con la
 \acr{glibc}.
 
 Infine nel caso il programma che si vuole eseguire sia uno script e non un
@@ -1685,7 +1694,7 @@ lunghezza massima di 127 caratteri e se questa dimensione viene ecceduta la
 stringa viene troncata; altri Unix hanno dimensioni massime diverse, e diversi
 comportamenti, ad esempio FreeBSD esegue la scansione della riga e la divide
 nei vari argomenti e se è troppo lunga restituisce un errore di
-\const{ENAMETOOLONG}; una comparazione dei vari comportamenti sui diversi
+\errval{ENAMETOOLONG}; una comparazione dei vari comportamenti sui diversi
 sistemi unix-like si trova su
 \url{http://www.in-ulm.de/~mascheck/various/shebang/}.
 
@@ -1851,7 +1860,7 @@ servano di nuovo.
 
 Questo in Linux viene fatto usando altri due gruppi di identificatori, il
 \textit{saved} ed il \textit{filesystem}. Il primo gruppo è lo stesso usato in
-SVr4, e previsto dallo standard POSIX quando è definita la costante
+SVr4, e previsto dallo standard POSIX quando è definita
 \macro{\_POSIX\_SAVED\_IDS},\footnote{in caso si abbia a cuore la portabilità
   del programma su altri Unix è buona norma controllare sempre la
   disponibilità di queste funzioni controllando se questa costante è
@@ -1922,11 +1931,11 @@ dell'utente che ha lanciato il programma, effettuare il lavoro che non
 necessita di privilegi aggiuntivi, ed eventualmente tornare indietro.
 
 Come esempio per chiarire l'uso di queste funzioni prendiamo quello con cui
-viene gestito l'accesso al file \sysfile{/var/run/utmp}.  In questo file viene
+viene gestito l'accesso al file \sysfiled{/var/run/utmp}.  In questo file viene
 registrato chi sta usando il sistema al momento corrente; chiaramente non può
 essere lasciato aperto in scrittura a qualunque utente, che potrebbe
 falsificare la registrazione. Per questo motivo questo file (e l'analogo
-\sysfile{/var/log/wtmp} su cui vengono registrati login e logout) appartengono
+\sysfiled{/var/log/wtmp} su cui vengono registrati login e logout) appartengono
 ad un gruppo dedicato (in genere \acr{utmp}) ed i programmi che devono
 accedervi (ad esempio tutti i programmi di terminale in X, o il programma
 \cmd{screen} che crea terminali multipli su una console) appartengono a questo
@@ -2165,7 +2174,7 @@ 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_limits}), leggendo il parametro
-  \texttt{\_SC\_NGROUPS\_MAX}.} in aggiunta al gruppo primario; questi vengono
+  \const{\_SC\_NGROUPS\_MAX}.} in aggiunta al gruppo primario; questi vengono
 ereditati dal processo padre e possono essere cambiati con queste funzioni.
 
 La funzione di sistema che permette di leggere i gruppi supplementari
@@ -2223,7 +2232,7 @@ 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 \textit{capability}
-  \macro{CAP\_SETGID}.} La prima delle due è la funzione di sistema
+  \const{CAP\_SETGID}.} La prima delle due è la funzione di sistema
 \funcd{setgroups},\footnote{la funzione è definita in BSD e SRv4, ma a
   differenza di \func{getgroups} non è stata inclusa in POSIX.1-2001, per
   poterla utilizzare deve essere definita la macro \macro{\_BSD\_SOURCE}.} ed
@@ -2272,13 +2281,12 @@ caso \var{errno} assumerà uno dei valori:
 La funzione esegue la scansione del database dei gruppi (usualmente
 \conffile{/etc/group}) cercando i gruppi di cui è membro l'utente \param{user}
 (di nuovo specificato per nome e non per \ids{UID}) con cui costruisce una
-lista di gruppi supplementari, a cui aggiunge anche
-\param{group}, infine imposta questa lista per il processo corrente usando
-\func{setgroups}.  Si tenga presente che sia \func{setgroups} che
-\func{initgroups} non sono definite nello standard POSIX.1 e che pertanto non
-è possibile utilizzarle quando si definisce \macro{\_POSIX\_SOURCE} o si
-compila con il flag \cmd{-ansi}, è pertanto meglio evitarle se si vuole
-scrivere codice portabile.
+lista di gruppi supplementari, a cui aggiunge anche \param{group}, infine
+imposta questa lista per il processo corrente usando \func{setgroups}.  Si
+tenga presente che sia \func{setgroups} che \func{initgroups} non sono
+definite nello standard POSIX.1 e che pertanto non è possibile utilizzarle
+quando si definisce \macro{\_POSIX\_SOURCE} o si compila con il flag
+\cmd{-ansi}, è pertanto meglio evitarle se si vuole scrivere codice portabile.
 
  
 \section{La gestione della priorità dei processi}
@@ -2502,6 +2510,9 @@ processo corrente, il suo prototipo è:
 \end{errlist}}
 \end{funcproto}
 
+\constbeg{PRIO\_MIN}
+\constbeg{PRIO\_MAX}
+
 L'argomento \param{inc} indica l'incremento da effettuare rispetto al valore
 di \textit{nice} corrente, che può assumere valori compresi fra
 \const{PRIO\_MIN} e \const{PRIO\_MAX}; nel caso di Linux sono fra $-20$ e
@@ -2519,6 +2530,9 @@ priorità di un processo, a partire da questa versione è consentito anche agli
 utenti normali alzare (entro certi limiti, che vedremo in
 sez.~\ref{sec:sys_resource_limit}) la priorità dei propri processi.
 
+\constend{PRIO\_MIN}
+\constend{PRIO\_MAX}
+
 Gli standard SUSv2 e POSIX.1 prevedono che la funzione ritorni il nuovo valore
 di \textit{nice} del processo; tuttavia la \textit{system call} di Linux non
 segue questa convenzione e restituisce sempre $0$ in caso di successo e $-1$
@@ -2563,7 +2577,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 \headfile{sys/time.h}, questo non è più
+essere necessario includere anche \headfiled{sys/time.h}, questo non è più
 necessario con versioni recenti delle librerie, ma è comunque utile per
 portabilità.
 
@@ -2582,10 +2596,10 @@ l'utente correnti.
     \param{which} & \param{who} & \textbf{Significato} \\
     \hline
     \hline
-    \const{PRIO\_PROCESS} & \type{pid\_t} & processo  \\
-    \const{PRIO\_PRGR}    & \type{pid\_t} & \textit{process group} (vedi
-                                            sez.~\ref{sec:sess_proc_group})\\
-    \const{PRIO\_USER}    & \type{uid\_t} & utente \\
+    \constd{PRIO\_PROCESS} & \type{pid\_t} & processo  \\
+    \constd{PRIO\_PRGR}    & \type{pid\_t} & \textit{process group} (vedi
+                                             sez.~\ref{sec:sess_proc_group})\\
+    \constd{PRIO\_USER}    & \type{uid\_t} & utente \\
     \hline
   \end{tabular}
   \caption{Legenda del valore dell'argomento \param{which} e del tipo
@@ -2778,17 +2792,17 @@ corrente.
     \textbf{Politica}  & \textbf{Significato} \\
     \hline
     \hline
-    \const{SCHED\_FIFO} & \textit{Scheduling real-time} con politica
-                          \textit{FIFO}. \\
-    \const{SCHED\_RR}   & \textit{Scheduling real-time} con politica
-                          \textit{Round Robin}. \\ 
+    \constd{SCHED\_FIFO} & \textit{Scheduling real-time} con politica
+                           \textit{FIFO}. \\
+    \constd{SCHED\_RR}   & \textit{Scheduling real-time} con politica
+                           \textit{Round Robin}. \\ 
     \hline
-    \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).\\ 
-    \const{SCHED\_IDLE} & \textit{Scheduling} di priorità estremamente
-                          bassa (dal kernel 2.6.23).\\
+    \constd{SCHED\_OTHER}& \textit{Scheduling} ordinario.\\
+    \constd{SCHED\_BATCH}& \textit{Scheduling} ordinario con l'assunzione
+                           ulteriore di lavoro \textit{CPU
+                           intensive} (dal kernel 2.6.16).\\ 
+    \constd{SCHED\_IDLE} & \textit{Scheduling} di priorità estremamente
+                           bassa (dal kernel 2.6.23).\\
     \hline
   \end{tabular}
   \caption{Valori dell'argomento \param{policy} per la funzione
@@ -2949,7 +2963,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} \headfile{sched.h}.
+  file} \headfiled{sched.h}.
 
 Se invece si vuole sapere quale è politica di \textit{scheduling} di un
 processo si può usare la funzione di sistema \funcd{sched\_getscheduler}, il
@@ -3043,7 +3057,7 @@ l'introduzione del \textit{Completely Fair Scheduler} questo comportamento è
 cambiato ed un processo che chiama la funzione viene inserito nella lista dei
 processi inattivo, con un tempo molto maggiore.\footnote{è comunque possibile
   ripristinare un comportamento analogo al precedente scrivendo il valore 1
-  nel file \sysctlfile{kernel/sched\_compat\_yield}.}
+  nel file \sysctlfiled{kernel/sched\_compat\_yield}.}
 
 L'uso delle funzione nella programmazione ordinaria può essere utile e
 migliorare le prestazioni generali del sistema quando si è appena rilasciata
@@ -3184,7 +3198,7 @@ conveniente l'uso dell'affinità di processore.
 
 Dato che il numero di processori può variare a seconda delle architetture, per
 semplificare l'uso dell'argomento \param{mask} la \acr{glibc} ha introdotto un
-apposito dato di tipo, \type{cpu\_set\_t},\footnote{questa è una estensione
+apposito dato di tipo, \typed{cpu\_set\_t},\footnote{questa è una estensione
   specifica della \acr{glibc}, da attivare definendo la macro
   \macro{\_GNU\_SOURCE}, non esiste infatti una standardizzazione per questo
   tipo di interfaccia e POSIX al momento non prevede nulla al riguardo.} che
@@ -3210,14 +3224,17 @@ se esso è già presente in un insieme, sono le seguenti:
 \vspace{3pt}
 \begin{funcbox}{ 
 \fhead{sched.h}
-\fdecl{void \macro{CPU\_ZERO}(cpu\_set\_t *set)}
+\fdecl{void \macrod{CPU\_ZERO}(cpu\_set\_t *set)}
 \fdesc{Inizializza un insieme di processori vuoto \param{set}.} 
-\fdecl{void \macro{CPU\_SET}(int cpu, cpu\_set\_t *set)}
-\fdesc{Inserisce il processore \param{cpu} nell'insieme di processori \param{set}.} 
-\fdecl{void \macro{CPU\_CLR}(int cpu, cpu\_set\_t *set)}
-\fdesc{Rimuove il processore \param{cpu} nell'insieme di processori \param{set}.} 
-\fdecl{int \macro{CPU\_ISSET}(int cpu, cpu\_set\_t *set)}
-\fdesc{Controlla se il processore \param{cpu} è nell'insieme di processori \param{set}.} 
+\fdecl{void \macrod{CPU\_SET}(int cpu, cpu\_set\_t *set)}
+\fdesc{Inserisce il processore \param{cpu} nell'insieme di
+  processori \param{set}.}  
+\fdecl{void \macrod{CPU\_CLR}(int cpu, cpu\_set\_t *set)}
+\fdesc{Rimuove il processore \param{cpu} nell'insieme di
+  processori \param{set}.}  
+\fdecl{int \macrod{CPU\_ISSET}(int cpu, cpu\_set\_t *set)}
+\fdesc{Controlla se il processore \param{cpu} è nell'insieme di
+  processori \param{set}.}  
 }
 \end{funcbox}}
 
@@ -3246,7 +3263,7 @@ volte, l'argomento cioè non deve avere \textsl{effetti collaterali} (in gergo
 
 Le CPU sono numerate da zero (che indica la prima disponibile) fino ad
 un numero massimo che dipende dalla architettura hardware. La costante
-\const{CPU\_SETSIZE} indica il numero massimo di processori che possono far
+\constd{CPU\_SETSIZE} indica il numero massimo di processori che possono far
 parte di un insieme (al momento vale sempre 1024), e costituisce un limite
 massimo al valore dell'argomento \param{cpu}.
 Dalla versione 2.6 della \acr{glibc} alle precedenti macro è stata aggiunta,
@@ -3256,7 +3273,7 @@ per contare il numero di processori in un insieme, l'ulteriore:
 \vspace{3pt}
 \begin{funcbox}{ 
 \fhead{sched.h}
-\fdecl{int \macro{CPU\_COUNT}(cpu\_set\_t *set)}
+\fdecl{int \macrod{CPU\_COUNT}(cpu\_set\_t *set)}
 \fdesc{Conta il numero di processori presenti nell'insieme \param{set}.} 
 }
 \end{funcbox}}
@@ -3269,13 +3286,13 @@ compiere delle operazioni logiche sugli insiemi di processori con:
 \vspace{3pt}
 \begin{funcbox}{ 
 \fhead{sched.h}
-\fdecl{void \macro{CPU\_AND}(cpu\_set\_t *destset, cpu\_set\_t *srcset1, cpu\_set\_t *srcset2)}
+\fdecl{void \macrod{CPU\_AND}(cpu\_set\_t *destset, cpu\_set\_t *srcset1, cpu\_set\_t *srcset2)}
 \fdesc{Esegue l'AND logico di due insiemi di processori.} 
-\fdecl{void \macro{CPU\_OR}(cpu\_set\_t *destset, cpu\_set\_t *srcset1, cpu\_set\_t *srcset2)}
+\fdecl{void \macrod{CPU\_OR}(cpu\_set\_t *destset, cpu\_set\_t *srcset1, cpu\_set\_t *srcset2)}
 \fdesc{Esegue l'OR logico di due insiemi di processori.} 
-\fdecl{void \macro{CPU\_XOR}(cpu\_set\_t *destset, cpu\_set\_t *srcset1, cpu\_set\_t *srcset2)}
+\fdecl{void \macrod{CPU\_XOR}(cpu\_set\_t *destset, cpu\_set\_t *srcset1, cpu\_set\_t *srcset2)}
 \fdesc{Esegue lo XOR logico di due insiemi di processori.} 
-\fdecl{int \macro{CPU\_EQUAL}(cpu\_set\_t *set1, cpu\_set\_t *set2)}
+\fdecl{int \macrod{CPU\_EQUAL}(cpu\_set\_t *set1, cpu\_set\_t *set2)}
 \fdesc{Verifica se due insiemi di processori sono uguali.} 
 }
 \end{funcbox}}
@@ -3304,11 +3321,11 @@ disallocare ed ottenere la dimensione in byte di un insieme di processori:
 \vspace{3pt}
 \begin{funcbox}{ 
 \fhead{sched.h}
-\fdecl{cpu\_set\_t * \macro{CPU\_ALLOC}(num\_cpus)}
+\fdecl{cpu\_set\_t * \macrod{CPU\_ALLOC}(num\_cpus)}
 \fdesc{Alloca dinamicamente un insieme di processori di dimensione voluta.} 
-\fdecl{void \macro{CPU\_FREE}(cpu\_set\_t *set)}
+\fdecl{void \macrod{CPU\_FREE}(cpu\_set\_t *set)}
 \fdesc{Disalloca un insieme di processori allocato dinamicamente.} 
-\fdecl{size\_t \macro{CPU\_ALLOC\_SIZE}(num\_cpus)}
+\fdecl{size\_t \macrod{CPU\_ALLOC\_SIZE}(num\_cpus)}
 \fdesc{Ritorna la dimensione di un insieme di processori allocato dinamicamente.} 
 }
 \end{funcbox}}
@@ -3453,9 +3470,9 @@ sez.~\ref{sec:sess_proc_group}) o tutti i processi di un utente.
     \param{which} & \param{who} & \textbf{Significato} \\
     \hline
     \hline
-    \const{IPRIO\_WHO\_PROCESS} & \type{pid\_t} & processo\\
-    \const{IPRIO\_WHO\_PRGR}    & \type{pid\_t} & \textit{process group}\\ 
-    \const{IPRIO\_WHO\_USER}    & \type{uid\_t} & utente\\
+    \constd{IPRIO\_WHO\_PROCESS} & \type{pid\_t} & processo\\
+    \constd{IPRIO\_WHO\_PRGR}    & \type{pid\_t} & \textit{process group}\\ 
+    \constd{IPRIO\_WHO\_USER}    & \type{uid\_t} & utente\\
     \hline
   \end{tabular}
   \caption{Legenda del valore dell'argomento \param{which} e del tipo
@@ -3472,6 +3489,7 @@ di \textit{scheduling} lo prevede, la priorità del processo all'interno della
 classe stessa. Questo stesso formato viene utilizzato per indicare il valore
 della priorità da impostare con l'argomento \param{ioprio} di
 \func{ioprio\_set}.
+
 \begin{table}[htb]
   \centering
   \footnotesize
@@ -3480,15 +3498,15 @@ della priorità da impostare con l'argomento \param{ioprio} di
     \textbf{Macro} & \textbf{Significato}\\
     \hline
     \hline
-    \macro{IOPRIO\_PRIO\_CLASS}\texttt{(\textit{value})}
+    \macrod{IOPRIO\_PRIO\_CLASS}\texttt{(\textit{value})}
                                 & Dato il valore di una priorità come
                                   restituito da \func{ioprio\_get} estrae il
                                   valore della classe.\\
-    \macro{IOPRIO\_PRIO\_DATA}\texttt{(\textit{value})}
+    \macrod{IOPRIO\_PRIO\_DATA}\texttt{(\textit{value})}
                                 & 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})}
+    \macrod{IOPRIO\_PRIO\_VALUE}\texttt{(\textit{class},\textit{prio})}
                                 & Dato un valore di priorità ed una classe
                                   ottiene il valore numerico da passare a
                                   \func{ioprio\_set}.\\
@@ -3517,9 +3535,11 @@ argomento di \func{ioprio\_set} per eseguire una impostazione.
     \textbf{Classe}  & \textbf{Significato} \\
     \hline
     \hline
-    \const{IOPRIO\_CLASS\_RT}  & \textit{Scheduling} di I/O \textit{real-time}.\\ 
+    \const{IOPRIO\_CLASS\_RT}  & \textit{Scheduling} di I/O
+                                 \textit{real-time}.\\  
     \const{IOPRIO\_CLASS\_BE}  & \textit{Scheduling} di I/O ordinario.\\ 
-    \const{IOPRIO\_CLASS\_IDLE}& \textit{Scheduling} di I/O di priorità minima.\\
+    \const{IOPRIO\_CLASS\_IDLE}& \textit{Scheduling} di I/O di priorità
+                                  minima.\\
     \hline
   \end{tabular}
   \caption{Costanti che identificano le classi di \textit{scheduling} di I/O.}
@@ -3532,7 +3552,7 @@ a quelle già adottate anche nel funzionamento dello \textit{scheduler} del
 processore. Ciascuna di esse è identificata tramite una opportuna costante,
 secondo quanto riportato in tab.~\ref{tab:IOsched_class}.
 
-La classe di priorità più bassa è \const{IOPRIO\_CLASS\_IDLE}; i processi in
+La classe di priorità più bassa è \constd{IOPRIO\_CLASS\_IDLE}; i processi in
 questa classe riescono ad accedere a disco soltanto quando nessun altro
 processo richiede l'accesso. Occorre pertanto usarla con molta attenzione,
 perché un processo in questa classe può venire completamente bloccato quando
@@ -3541,7 +3561,7 @@ accedendo al disco. Quando si usa questa classe non ha senso indicare un
 valore di priorità, dato che in questo caso non esiste nessuna gerarchia e la
 priorità è identica, la minima possibile, per tutti i processi.
 
-La seconda classe di priorità di I/O è \const{IOPRIO\_CLASS\_BE} (il nome sta
+La seconda classe di priorità di I/O è \constd{IOPRIO\_CLASS\_BE} (il nome sta
 per \textit{best-effort}) che è quella usata ordinariamente da tutti
 processi. In questo caso esistono priorità diverse che consentono di
 assegnazione di una maggiore banda passante nell'accesso a disco ad un
@@ -3554,7 +3574,7 @@ priorità maggiore.
 
 
 Infine la classe di priorità di I/O \textit{real-time}
-\const{IOPRIO\_CLASS\_RT} ricalca le omonime priorità di processore: un
+\constd{IOPRIO\_CLASS\_RT} ricalca le omonime priorità di processore: un
 processo in questa classe ha sempre la precedenza nell'accesso a disco
 rispetto a tutti i processi delle altre classi e di un processo nella stessa
 classe ma con priorità inferiore, ed è pertanto in grado di bloccare
@@ -3629,8 +3649,8 @@ 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}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{PR\_CAPBSET\_READ}] Controlla la disponibilità di una delle
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
+\item[\constd{PR\_CAPBSET\_READ}] Controlla la disponibilità di una delle
   \textit{capability} (vedi sez.~\ref{sec:proc_capabilities}). La funzione
   ritorna 1 se la capacità specificata nell'argomento \param{arg2} (con una
   delle costanti di tab.~\ref{tab:proc_capabilities}) è presente nel
@@ -3638,7 +3658,7 @@ momento:\footnote{alla stesura di questa sezione, cioè con il kernel 3.2.}
   se \param{arg2} non è un valore valido si avrà un errore di \errval{EINVAL}.
   Introdotta a partire dal kernel 2.6.25.
 
-\item[\const{PR\_CAPBSET\_DROP}] Rimuove permanentemente una delle
+\item[\constd{PR\_CAPBSET\_DROP}] Rimuove permanentemente una delle
   \textit{capabilities} (vedi sez.~\ref{sec:proc_capabilities}) dal processo e
   da tutti i suoi discendenti. La funzione cancella la capacità specificata
   nell'argomento \param{arg2} con una delle costanti di
@@ -3650,7 +3670,7 @@ momento:\footnote{alla stesura di questa sezione, cioè con il kernel 3.2.}
   chiamata fallirà con un errore di \errval{EINVAL}. Introdotta a partire dal
   kernel 2.6.25.
 
-\item[\const{PR\_SET\_DUMPABLE}] Imposta il flag che determina se la
+\item[\constd{PR\_SET\_DUMPABLE}] Imposta il flag che determina se la
   terminazione di un processo a causa di un segnale per il quale è prevista la
   generazione di un file di \textit{core dump} (vedi
   sez.~\ref{sec:sig_standard}) lo genera effettivamente. In genere questo flag
@@ -3671,64 +3691,64 @@ momento:\footnote{alla stesura di questa sezione, cioè con il kernel 3.2.}
   \textit{core dump} appartenente all'amministratore in directory dove
   l'utente avrebbe avuto permessi di accesso.
 
-\item[\const{PR\_GET\_DUMPABLE}] Ottiene come valore di ritorno della funzione
+\item[\constd{PR\_GET\_DUMPABLE}] Ottiene come valore di ritorno della funzione
   lo stato corrente del flag che controlla la effettiva generazione dei
   \textit{core dump}. Introdotta a partire dal kernel 2.3.20.
 
-\item[\const{PR\_SET\_ENDIAN}] Imposta la \textit{endianness} del processo
+\item[\constd{PR\_SET\_ENDIAN}] Imposta la \textit{endianness} del processo
   chiamante secondo il valore fornito in \param{arg2}. I valori possibili sono
-  sono: \const{PR\_ENDIAN\_BIG} (\textit{big endian}),
-  \const{PR\_ENDIAN\_LITTLE} (\textit{little endian}), e
-  \const{PR\_ENDIAN\_PPC\_LITTLE} (lo pseudo \textit{little endian} del
+  sono: \constd{PR\_ENDIAN\_BIG} (\textit{big endian}),
+  \constd{PR\_ENDIAN\_LITTLE} (\textit{little endian}), e
+  \constd{PR\_ENDIAN\_PPC\_LITTLE} (lo pseudo \textit{little endian} del
   PowerPC). Introdotta a partire dal kernel 2.6.18, solo per architettura
   PowerPC.
 
-\item[\const{PR\_GET\_ENDIAN}] Ottiene il valore della \textit{endianness} del
+\item[\constd{PR\_GET\_ENDIAN}] Ottiene il valore della \textit{endianness} del
   processo chiamante, salvato sulla variabile puntata da \param{arg2} che deve
   essere passata come di tipo ``\ctyp{int *}''. Introdotta a partire dal
   kernel 2.6.18, solo su PowerPC.
 
-\item[\const{PR\_SET\_FPEMU}] Imposta i bit di controllo per l'emulazione
+\item[\constd{PR\_SET\_FPEMU}] Imposta i bit di controllo per l'emulazione
   della virgola mobile su architettura ia64, secondo il valore
-  di \param{arg2}, si deve passare \const{PR\_FPEMU\_NOPRINT} per emulare in
+  di \param{arg2}, si deve passare \constd{PR\_FPEMU\_NOPRINT} per emulare in
   maniera trasparente l'accesso alle operazioni in virgola mobile, o
-  \const{PR\_FPEMU\_SIGFPE} per non emularle ed inviare il segnale
+  \constd{PR\_FPEMU\_SIGFPE} per non emularle ed inviare il segnale
   \signal{SIGFPE} (vedi sez.~\ref{sec:sig_prog_error}). Introdotta a partire
   dal kernel 2.4.18, solo su architettura ia64.
 
-\item[\const{PR\_GET\_FPEMU}] Ottiene il valore dei flag di controllo
+\item[\constd{PR\_GET\_FPEMU}] Ottiene il valore dei flag di controllo
   dell'emulazione della virgola mobile, salvato all'indirizzo puntato
   da \param{arg2}, che deve essere di tipo ``\ctyp{int *}''. Introdotta a
   partire dal kernel 2.4.18, solo su architettura ia64.
 
-\item[\const{PR\_SET\_FPEXC}] Imposta la modalità delle eccezioni in virgola
+\item[\constd{PR\_SET\_FPEXC}] Imposta la modalità delle eccezioni in virgola
   mobile (\textit{floating-point exception mode}) al valore di \param{arg2}.
   I valori possibili sono: 
   \begin{itemize*}
-  \item \const{PR\_FP\_EXC\_SW\_ENABLE} per usare FPEXC per le eccezioni,
-  \item \const{PR\_FP\_EXC\_DIV} per la divisione per zero in virgola mobile,
-  \item \const{PR\_FP\_EXC\_OVF} per gli overflow,
-  \item \const{PR\_FP\_EXC\_UND} per gli underflow,
-  \item \const{PR\_FP\_EXC\_RES} per risultati non esatti,
-  \item \const{PR\_FP\_EXC\_INV} per operazioni invalide,
-  \item \const{PR\_FP\_EXC\_DISABLED} per disabilitare le eccezioni,
-  \item \const{PR\_FP\_EXC\_NONRECOV} per usare la modalità di eccezione
+  \item \constd{PR\_FP\_EXC\_SW\_ENABLE} per usare FPEXC per le eccezioni,
+  \item \constd{PR\_FP\_EXC\_DIV} per la divisione per zero in virgola mobile,
+  \item \constd{PR\_FP\_EXC\_OVF} per gli overflow,
+  \item \constd{PR\_FP\_EXC\_UND} per gli underflow,
+  \item \constd{PR\_FP\_EXC\_RES} per risultati non esatti,
+  \item \constd{PR\_FP\_EXC\_INV} per operazioni invalide,
+  \item \constd{PR\_FP\_EXC\_DISABLED} per disabilitare le eccezioni,
+  \item \constd{PR\_FP\_EXC\_NONRECOV} per usare la modalità di eccezione
     asincrona non recuperabile,
-  \item \const{PR\_FP\_EXC\_ASYNC} per usare la modalità di eccezione
+  \item \constd{PR\_FP\_EXC\_ASYNC} per usare la modalità di eccezione
     asincrona recuperabile,
-  \item \const{PR\_FP\_EXC\_PRECISE} per la modalità precisa di
+  \item \constd{PR\_FP\_EXC\_PRECISE} per la modalità precisa di
     eccezione.\footnote{trattasi di gestione specialistica della gestione
       delle eccezioni dei calcoli in virgola mobile che, i cui dettagli al
       momento vanno al di là dello scopo di questo testo.}
   \end{itemize*}
 Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 
-\item[\const{PR\_GET\_FPEXC}] Ottiene il valore della modalità delle eccezioni
+\item[\constd{PR\_GET\_FPEXC}] Ottiene il valore della modalità delle eccezioni
   delle operazioni in virgola mobile, salvata all'indirizzo
   puntato \param{arg2}, che deve essere di tipo ``\ctyp{int *}''.  Introdotta
   a partire dal kernel 2.4.21, solo su PowerPC.
 
-\item[\const{PR\_SET\_KEEPCAPS}] Consente di controllare quali
+\item[\constd{PR\_SET\_KEEPCAPS}] Consente di controllare quali
   \textit{capabilities} vengono cancellate quando si esegue un cambiamento di
   \ids{UID} del processo (per i dettagli si veda
   sez.~\ref{sec:proc_capabilities}, in particolare quanto illustrato a
@@ -3740,21 +3760,21 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   sez.~\ref{sec:proc_capabilities} e l'uso di \const{PR\_SET\_SECUREBITS} più
   avanti). Introdotta a partire dal kernel 2.2.18.
 
-\item[\const{PR\_GET\_KEEPCAPS}] Ottiene come valore di ritorno della funzione
+\item[\constd{PR\_GET\_KEEPCAPS}] Ottiene come valore di ritorno della funzione
   il valore del flag di controllo delle \textit{capabilities} impostato con
   \const{PR\_SET\_KEEPCAPS}. Introdotta a partire dal kernel 2.2.18.
 
-\item[\const{PR\_SET\_NAME}] Imposta il nome del processo chiamante alla
+\item[\constd{PR\_SET\_NAME}] Imposta il nome del processo chiamante alla
   stringa puntata da \param{arg2}, che deve essere di tipo ``\ctyp{char *}''. Il
   nome può essere lungo al massimo 16 caratteri, e la stringa deve essere
   terminata da NUL se più corta.  Introdotta a partire dal kernel 2.6.9.
 
-\item[\const{PR\_GET\_NAME}] Ottiene il nome del processo chiamante nella
+\item[\constd{PR\_GET\_NAME}] Ottiene il nome del processo chiamante nella
   stringa puntata da \param{arg2}, che deve essere di tipo ``\ctyp{char *}'';
   si devono allocare per questo almeno 16 byte, e il nome sarà terminato da
   NUL se più corto. Introdotta a partire dal kernel 2.6.9.
 
-\item[\const{PR\_SET\_PDEATHSIG}] Consente di richiedere l'emissione di un
+\item[\constd{PR\_SET\_PDEATHSIG}] Consente di richiedere l'emissione di un
   segnale, che sarà ricevuto dal processo chiamante, in occorrenza della
   terminazione del proprio processo padre; in sostanza consente di invertire
   il ruolo di \signal{SIGCHLD}. Il valore di \param{arg2} deve indicare il
@@ -3762,13 +3782,13 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   automaticamente cancellato per un processo figlio creato con \func{fork}.
   Introdotta a partire dal kernel 2.1.57.
 
-\item[\const{PR\_GET\_PDEATHSIG}] Ottiene il valore dell'eventuale segnale
+\item[\constd{PR\_GET\_PDEATHSIG}] Ottiene il valore dell'eventuale segnale
   emesso alla terminazione del padre, salvato all'indirizzo
   puntato \param{arg2}, che deve essere di tipo ``\ctyp{int *}''. Introdotta a
   partire dal kernel 2.3.15.
 
 \itindbeg{secure~computing~mode}
-\item[\const{PR\_SET\_SECCOMP}] Imposta il cosiddetto \textit{secure computing
+\item[\constd{PR\_SET\_SECCOMP}] Imposta il cosiddetto \textit{secure computing
     mode} per il processo corrente. Prevede come unica possibilità
   che \param{arg2} sia impostato ad 1. Una volta abilitato il \textit{secure
     computing mode} il processo potrà utilizzare soltanto un insieme
@@ -3794,7 +3814,7 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 % TODO a partire dal kernel 3.17 è stata introdotta la nuova syscall seccomp,
 % vedi http://lwn.net/Articles/600250/ e http://lwn.net/Articles/603321/
 
-\item[\const{PR\_GET\_SECCOMP}] Ottiene come valore di ritorno della funzione
+\item[\constd{PR\_GET\_SECCOMP}] Ottiene come valore di ritorno della funzione
   lo stato corrente del \textit{secure computing mode}, al momento attuale la
   funzione è totalmente inutile in quanto l'unico valore ottenibile è 0, dato
   che la chiamata di questa funzione in \textit{secure computing mode}
@@ -3802,7 +3822,7 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   eventuali estensioni future. Introdotta a partire dal kernel 2.6.23.
 \itindend{secure~computing~mode}
 
-\item[\const{PR\_SET\_SECUREBITS}] Imposta i \textit{securebits} per il
+\item[\constd{PR\_SET\_SECUREBITS}] Imposta i \textit{securebits} per il
   processo chiamante al valore indicato da \param{arg2}; per i dettagli sul
   significato dei \textit{securebits} si veda
   sez.~\ref{sec:proc_capabilities}, ed in particolare i valori di
@@ -3811,35 +3831,35 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   altrimenti la chiamata fallirà con un errore di \errval{EPERM}. Introdotta a
   partire dal kernel 2.6.26.
 
-\item[\const{PR\_GET\_SECUREBITS}] Ottiene come valore di ritorno della
+\item[\constd{PR\_GET\_SECUREBITS}] Ottiene come valore di ritorno della
   funzione l'impostazione corrente per i \textit{securebits}. Introdotta a
   partire dal kernel 2.6.26.
 
-\item[\const{PR\_SET\_TIMING}] Imposta il metodo di temporizzazione del
+\item[\constd{PR\_SET\_TIMING}] Imposta il metodo di temporizzazione del
   processo da indicare con il valore di \param{arg2}, attualmente i valori
-  possibili sono due, con \const{PR\_TIMING\_STATISTICAL} si usa il metodo
-  statistico tradizionale, con \const{PR\_TIMING\_TIMESTAMP} il più accurato
+  possibili sono due, con \constd{PR\_TIMING\_STATISTICAL} si usa il metodo
+  statistico tradizionale, con \constd{PR\_TIMING\_TIMESTAMP} il più accurato
   basato su dei \textit{timestamp}, quest'ultimo però non è ancora
   implementato ed il suo uso comporta la restituzione di un errore di
   \errval{EINVAL}. Introdotta a partire dal kernel 2.6.0-test4.
 
-\item[\const{PR\_GET\_TIMING}] Ottiene come valore di ritorno della funzione
+\item[\constd{PR\_GET\_TIMING}] Ottiene come valore di ritorno della funzione
   il metodo di temporizzazione del processo attualmente in uso (uno dei due
   valori citati per \const{PR\_SET\_TIMING}). Introdotta a partire dal kernel
   2.6.0-test4.
 
-\item[\const{PR\_SET\_TSC}] Imposta il flag che indica se il processo
+\item[\constd{PR\_SET\_TSC}] Imposta il flag che indica se il processo
   chiamante può leggere il registro di processore contenente il contatore dei
   \textit{timestamp} (TSC, o \textit{Time Stamp Counter}) da indicare con il
-  valore di \param{arg2}. Si deve specificare \const{PR\_TSC\_ENABLE} per
-  abilitare la lettura o \const{PR\_TSC\_SIGSEGV} per disabilitarla con la
+  valore di \param{arg2}. Si deve specificare \constd{PR\_TSC\_ENABLE} per
+  abilitare la lettura o \constd{PR\_TSC\_SIGSEGV} per disabilitarla con la
   generazione di un segnale di \signal{SIGSEGV} (vedi
   sez.~\ref{sec:sig_prog_error}). La lettura viene automaticamente
   disabilitata se si attiva il \textit{secure computing mode} (vedi
   \const{PR\_SET\_SECCOMP} più avanti).  Introdotta a partire dal kernel
   2.6.26, solo su x86.
 
-\item[\const{PR\_GET\_TSC}] Ottiene il valore del flag che controlla la
+\item[\constd{PR\_GET\_TSC}] Ottiene il valore del flag che controlla la
   lettura del contattore dei \textit{timestamp}, salvato all'indirizzo
   puntato \param{arg2}, che deve essere di tipo ``\ctyp{int *}''. Introdotta a
   partire dal kernel 2.6.26, solo su x86.
@@ -3847,11 +3867,11 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 % http://blog.cr0.org/2009/05/time-stamp-counter-disabling-oddities.html,
 % http://en.wikipedia.org/wiki/Time_Stamp_Counter 
 
-\item[\const{PR\_SET\_UNALIGN}] Imposta la modalità di controllo per l'accesso
+\item[\constd{PR\_SET\_UNALIGN}] Imposta la modalità di controllo per l'accesso
   a indirizzi di memoria non allineati, che in varie architetture risultano
   illegali, da indicare con il valore di \param{arg2}. Si deve specificare il
-  valore \const{PR\_UNALIGN\_NOPRINT} per ignorare gli accessi non allineati,
-  ed il valore \const{PR\_UNALIGN\_SIGBUS} per generare un segnale di
+  valore \constd{PR\_UNALIGN\_NOPRINT} per ignorare gli accessi non allineati,
+  ed il valore \constd{PR\_UNALIGN\_SIGBUS} per generare un segnale di
   \signal{SIGBUS} (vedi sez.~\ref{sec:sig_prog_error}) in caso di accesso non
   allineato.  Introdotta con diverse versioni su diverse architetture.
 
@@ -3874,11 +3894,11 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 
   Il comportamento di default prevede che per tutti i processi si applichi la
   politica generale di sistema definita nel file
-  \sysctlfile{vm/memory\_failure\_early\_kill}, ma specificando
-  per \param{arg2} il valore \const{PR\_MCE\_KILL\_SET} è possibile impostare
+  \sysctlfiled{vm/memory\_failure\_early\_kill}, ma specificando
+  per \param{arg2} il valore \constd{PR\_MCE\_KILL\_SET} è possibile impostare
   con il contenuto di \param{arg3} una politica specifica del processo
   chiamante. Si può tornare alla politica di default del sistema utilizzando
-  invece per \param{arg2} il valore \const{PR\_MCE\_KILL\_CLEAR}. In tutti i
+  invece per \param{arg2} il valore \constd{PR\_MCE\_KILL\_CLEAR}. In tutti i
   casi, per compatibilità con eventuali estensioni future, tutti i valori
   degli argomenti non utilizzati devono essere esplicitamente posti a zero,
   pena il fallimento della chiamata con un errore di \errval{EINVAL}.
@@ -3887,9 +3907,9 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   \const{PR\_MCE\_KILL\_SET} i valori di \param{arg3} possono essere soltanto
   due, che corrispondono anche al valore che si trova nell'impostazione
   generale di sistema di \texttt{memory\_failure\_early\_kill}, con
-  \const{PR\_MCE\_KILL\_EARLY} si richiede l'emissione immediata di
+  \constd{PR\_MCE\_KILL\_EARLY} si richiede l'emissione immediata di
   \signal{SIGBUS} non appena viene rilevato un errore, mentre con
-  \const{PR\_MCE\_KILL\_LATE} il segnale verrà inviato solo quando il processo
+  \constd{PR\_MCE\_KILL\_LATE} il segnale verrà inviato solo quando il processo
   tenterà un accesso alla memoria corrotta. Questi due valori corrispondono
   rispettivamente ai valori 1 e 0 di
   \texttt{memory\_failure\_early\_kill}.\footnote{in sostanza nel primo caso
@@ -3898,18 +3918,18 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
     secondo caso prima la pagina di memoria viene tolta dallo spazio degli
     indirizzi di ciascun processo, mentre il segnale viene inviato solo quei
     processi che tentano di accedervi.} Si può usare per \param{arg3} anche un
-  terzo valore, \const{PR\_MCE\_KILL\_DEFAULT}, che corrisponde a impostare
+  terzo valore, \constd{PR\_MCE\_KILL\_DEFAULT}, che corrisponde a impostare
   per il processo la politica di default.\footnote{si presume la politica di
     default corrente, in modo da non essere influenzati da un eventuale
     successivo cambiamento della stessa.} Introdotta a partire dal kernel
   2.6.32.
-\item[\const{PR\_MCE\_KILL\_GET}] Ottiene come valore di ritorno della
+\item[\constd{PR\_MCE\_KILL\_GET}] Ottiene come valore di ritorno della
   funzione la politica di gestione degli errori dovuti a corruzione della
   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.
 \itindbeg{child~reaper}
-\item[\const{PR\_SET\_CHILD\_SUBREAPER}] Se \param{arg2} è diverso da zero
+\item[\constd{PR\_SET\_CHILD\_SUBREAPER}] Se \param{arg2} è diverso da zero
   imposta l'attributo di \textit{child reaper} per il processo, se nullo lo
   cancella. Lo stato di \textit{child reaper} è una funzionalità, introdotta
   con il kernel 3.4, che consente di far svolgere al processo che ha questo
@@ -3926,7 +3946,7 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
   con lo stato di \textit{child reaper} termina prima dei suoi discendenti,
   svolgerà questo ruolo il più prossimo antenato ad avere lo stato di
   \textit{child reaper}, 
-\item[\const{PR\_GET\_CHILD\_SUBREAPER}] Ottiene l'impostazione relativa allo
+\item[\constd{PR\_GET\_CHILD\_SUBREAPER}] Ottiene l'impostazione relativa allo
   lo stato di \textit{child reaper} del processo chiamante, salvata come
   \textit{value result} all'indirizzo puntato da \param{arg2} (da indicare
   come di tipo \code{int *}). Il valore viene letto come valore logico, se
@@ -3947,12 +3967,14 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 % codice e dati, stack, brack pointer ecc. vedi
 % http://git.kernel.org/linus/f606b77f1a9e362451aca8f81d8f36a3a112139e 
 
+% TODO documentare ARCH_SET_CPUID e ARCH_GET_CPUID, introdotte con il kernel
+% 4.12, vedi https://lwn.net/Articles/721182/
+
 
 \label{sec:prctl_operation}
 \end{basedescript}
 
 
-
 \subsection{La \textit{system call} \func{clone}}
 \label{sec:process_clone}
 
@@ -3977,12 +3999,21 @@ processi ordinari, abbiamo deciso di usare la nomenclatura \textit{task} per
 indicare la unità di esecuzione generica messa a disposizione del kernel che
 \texttt{sys\_clone} permette di creare.
 
+\itindbeg{namespace}
+\itindbeg{container}
+
 Oltre a questo la funzione consente, ad uso delle nuove funzionalità di
-virtualizzazione dei processi, di creare nuovi \textit{namespace} per una
-serie di proprietà generali dei processi (come l'elenco dei \ids{PID},
-l'albero dei file, i \textit{mount point}, la rete, ecc.), che consentono di
-creare gruppi di processi che vivono in una sorta di spazio separato dagli
-altri, che costituisce poi quello che viene chiamato un \textit{container}.
+virtualizzazione dei processi, di creare nuovi ``\textit{namespace}'' per una
+serie di proprietà generali (come l'elenco dei \ids{PID}, l'albero dei file, i
+\textit{mount point}, la rete, il sistema di IPC, ecc.). L'uso dei
+``\textit{namespace}'' consente creare gruppi di processi che vedono le
+suddette proprietà in maniera indipendente fra loro. I processi di ciascun
+gruppo vengono così eseguiti come in una sorta di spazio separato da quello
+degli altri gruppi, che costituisce poi quello che viene chiamato un
+\textit{container}.
+
+\itindend{namespace}
+\itindend{container}
 
 La \textit{system call} richiede soltanto due argomenti: il
 primo, \param{flags}, consente di controllare le modalità di creazione del
@@ -4053,7 +4084,7 @@ visto in sez.~\ref{sec:proc_syscall}.\footnote{ed inoltre per questa
     \item[\errcode{EINVAL}] si è usata una combinazione non valida di flag o
       un valore nullo per \param{child\_stack}.
     \item[\errcode{ENOMEM}] non c'è memoria sufficiente per creare una nuova
-      \struct{task\_struct} o per copiare le parti del contesto del chiamante
+      \texttt{task\_struct} o per copiare le parti del contesto del chiamante
       necessarie al nuovo \textit{task}.
     \item[\errcode{EPERM}] non si hanno i privilegi di amministratore
       richiesti dai flag indicati.
@@ -4097,16 +4128,20 @@ 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}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5 cm}\desclabelstyle{\nextlinelabel}}
+
+\item[\constd{CLONE\_CHILD\_CLEARTID}] cancella il valore del \textit{thread
+    ID} posto all'indirizzo dato dall'argomento \param{ctid}, eseguendo un
+  riattivazione del \textit{futex} (vedi sez.~\ref{sec:xxx_futex}) a
+  quell'indirizzo. Questo flag viene utilizzato dalla librerie di gestione dei
+  \textit{thread} ed è presente dal kernel 2.5.49.
 
-\item[\const{CLONE\_CHILD\_CLEARTID}] cancella il valore del \ids{TID}
-  all'indirizzo dato dall'argomento \param{ctid}, eseguendo un riattivazione
-  del \textit{futex} (vedi sez.~\ref{sec:xxx_futex}) a quell'indirizzo; questo
-  flag viene utilizzato dalla librerie di gestione dei \textit{thread}.
-\item[\const{CLONE\_CHILD\_SETTID}] scrive il \ids{TID} del \textit{thread}
+\item[\constd{CLONE\_CHILD\_SETTID}] scrive il \ids{TID} del \textit{thread}
   figlio all'indirizzo dato dall'argomento \param{ctid}. Questo flag viene
-  utilizzato dalla librerie di gestione dei \textit{thread}.
-\item[\const{CLONE\_FILES}] se impostato il nuovo processo condividerà con il
+  utilizzato dalla librerie di gestione dei \textit{thread} ed è presente dal
+  kernel 2.5.49.
+
+\item[\constd{CLONE\_FILES}] se impostato il nuovo processo condividerà con il
   padre la \textit{file descriptor table} (vedi sez.~\ref{sec:file_fd}),
   questo significa che ogni \textit{file descriptor} aperto da un processo
   verrà visto anche dall'altro e che ogni chiusura o cambiamento dei
@@ -4119,7 +4154,7 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa
   ordinario di un sistema unix-like e che illustreremo in dettaglio in
   sez.~\ref{sec:file_shared_access}.
 
-\item[\const{CLONE\_FS}] se questo flag viene impostato il nuovo processo
+\item[\constd{CLONE\_FS}] se questo flag viene impostato il nuovo processo
   condividerà con il padre le informazioni relative all'albero dei file, ed in
   particolare avrà la stessa radice (vedi sez.~\ref{sec:file_chroot}), la
   stessa directory di lavoro (vedi sez.~\ref{sec:file_work_dir}) e la stessa
@@ -4129,37 +4164,97 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa
   informazioni, che saranno così indipendenti per i due processi, come avviene
   nel comportamento ordinario di un sistema unix-like.
 
-\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}]
+\item[\constd{CLONE\_IO}] se questo flag viene impostato il nuovo il nuovo
+  processo condividerà con il padre il contesto dell'I/O, altrimenti, come
+  come avviene nel comportamento ordinario con una \func{fork} otterrà un suo
+  contesto dell'I/O. 
+
+  Il contesto dell'I/O viene usato dagli \textit{scheduler} di I/O (visti in
+  sez.~\ref{sec:io_priority}) e se questo è lo stesso per diversi processi
+  questi vengono trattati come se fossero lo stesso, condividendo il tempo per
+  l'accesso al disco, e possono interscambiarsi nell'accesso a disco. L'uso di
+  questo flag consente, quando più \textit{thread} eseguono dell'I/O per conto
+  dello stesso processo (ad esempio con le funzioni di I/O asincrono di
+  sez.~\ref{sec:file_asyncronous_io}), migliori prestazioni.
+
+%TODO : tutti i CLONE_NEW* attengono ai namespace, ed è meglio metterli nella
+%relativa sezione da creare a parte
+
+% \item[\constd{CLONE\_NEWIPC}] è uno dei flag ad uso dei \textit{container},
+%   introdotto con il kernel 2.6.19. L'uso di questo flag crea per il nuovo
+%   processo un nuovo \textit{namespace} per il sistema di IPC, sia per quello
+%   di SysV (vedi sez.~\ref{sec:ipc_sysv}) che, dal kernel 2.6.30, per le code
+%   di messaggi POSIX (vedi sez.~\ref{sec:ipc_posix_mq}); si applica cioè a
+%   tutti quegli oggetti che non vegono identificati con un \textit{pathname}
+%   sull'albero dei file.
+
+%   L'uso di questo flag richiede privilegi di amministratore (più precisamente
+%   la capacità \const{CAP\_SYS\_ADMIN}) e non può essere usato in combinazione
+%   con \const{CLONE\_SYSVSEM}. 
+
+% \item[\constd{CLONE\_NEWNET}]
+% \item[\constd{CLONE\_NEWNS}]
+% \item[\constd{CLONE\_NEWPID}]
+% \item[\constd{CLONE\_NEWUTS}]
+
+
+% TODO trattare CLONE_NEWCGROUP introdotto con il kernel 4.6, vedi
+% http://lwn.net/Articles/680566/ 
+
+\item[\constd{CLONE\_PARENT}]
+\item[\constd{CLONE\_PARENT\_SETTID}]
+\item[\constd{CLONE\_PID}]
+
+\item[\constd{CLONE\_PTRACE}] se questo flag viene impostato ed il processo
+  chiamante viene tracciato (vedi sez.~\ref{sec:process_ptrace}) anche il
+  figlio viene tracciato. 
+
+\item[\constd{CLONE\_SETTLS}]
+\item[\constd{CLONE\_SIGHAND}]
+\item[\constd{CLONE\_STOPPED}]
+\item[\constd{CLONE\_SYSVSEM}]
+\item[\constd{CLONE\_THREAD}]
+
+\item[\constd{CLONE\_UNTRACED}] se questo flag viene impostato un processo non
+  può più forzare \const{CLONE\_PTRACE} su questo processo.
+
+\item[\constd{CLONE\_VFORK}] se questo flag viene impostato il chiamante viene
+  fermato fintato che il figlio appena creato non rilascia la sua memoria
+  virtuale con una chiamata a \func{exec} o \func{exit}, viene quindi
+  replicato il comportamento di \func{vfork}.
+
+\item[\constd{CLONE\_VM}] se questo flag viene impostato il nuovo processo
+  condividerà con il padre la stessa memoria virtuale, e le scritture in
+  memoria fatte da uno qualunque dei processi saranno visibili dall'altro,
+  così come ogni mappatura in memoria (vedi sez.~\ref{sec:file_memory_map}). 
+
+  Se non viene impostato il processo figlio otterrà una copia dello spazio
+  degli indirizzi e si otterrà il comportamento ordinario di un processo di un
+  sistema unix-like creato con la funzione \func{fork}.
 \end{basedescript}
 
 
+%TODO sezione separata sui namespace 
+
 %TODO trattare unshare, vedi anche http://lwn.net/Articles/532748/
 
+%TODO: trattare la funzione setns e i namespace file descriptors (vedi
+% http://lwn.net/Articles/407495/) introdotti con il kernel 3.0, altre
+% informazioni su setns qui: http://lwn.net/Articles/532748/
+% http://lwn.net/Articles/531498/
+
+
+% TODO trattare le funzioni di protezione della memoria pkey_alloc, pkey_free,
+% pkey_mprotect, introdotte con il kernel 4.8, vedi
+% http://lwn.net/Articles/689395/ e Documentation/x86/protection-keys.txt 
 
 %TODO trattare kcmp aggiunta con il kernel 3.5, vedi
 % https://lwn.net/Articles/478111/
 
-\subsection{La funzione \func{ptrace}}
-\label{sec:process_ptrace}
+%\subsection{La funzione \func{ptrace}}
+%\label{sec:process_ptrace}
 
-Da fare
+%Da fare
 
 % TODO: trattare PTRACE_SEIZE, aggiunta con il kernel 3.1
 % TODO: trattare PTRACE_O_EXITKILL, aggiunta con il kernel 3.8 (vedi
@@ -4169,18 +4264,18 @@ Da fare
 % TODO: trattare PTRACE_O_SUSPEND_SECCOMP, aggiunta con il kernel 4.3, vedi
 % http://lwn.net/Articles/656675/ 
 
-\subsection{La gestione delle operazioni in virgola mobile}
-\label{sec:process_fenv}
+%\subsection{La gestione delle operazioni in virgola mobile}
+%\label{sec:process_fenv}
 
-Da fare.
+%Da fare.
 
 % TODO eccezioni ed arrotondamenti per la matematica in virgola mobile 
 % consultare la manpage di fenv, math_error, fpclassify, matherr, isgreater,
 % isnan, nan, INFINITY
 
 
-\subsection{L'accesso alle porte di I/O}
-\label{sec:process_io_port}
+%\subsection{L'accesso alle porte di I/O}
+%\label{sec:process_io_port}
 
 %
 % TODO l'I/O sulle porte di I/O 
@@ -4188,7 +4283,7 @@ Da fare.
 % non c'entra nulla qui, va trovato un altro posto (altri meccanismi di I/O in
 % fileintro ?)
 
-Da fare
+%Da fare
 
 
 %\subsection{La gestione di architetture a nodi multipli}
@@ -4218,6 +4313,8 @@ Da fare
 %TODO trattare membarrier, introdotta con il kernel 4.3
 % vedi http://lwn.net/Articles/369567/ http://lwn.net/Articles/369640/
 % http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=5b25b13ab08f616efd566347d809b4ece54570d1 
+% vedi anche l'ulteriore opzione "expedited" introdotta con il kernel 4.14
+% (https://lwn.net/Articles/728795/) 
 
 \section{Problematiche di programmazione multitasking}
 \label{sec:proc_multi_prog}
@@ -4276,14 +4373,14 @@ operazione è messa in discussione, per cui l'assenza di eventuali \textit{race
   condition} (vedi sez.~\ref{sec:proc_race_cond}) deve essere sempre
 verificata nei minimi dettagli.
 
-In questo caso il sistema provvede un tipo di dato, il \type{sig\_atomic\_t},
+In questo caso il sistema provvede un tipo di dato, il \typed{sig\_atomic\_t},
 il cui accesso è assicurato essere atomico.  In pratica comunque si può
 assumere che, in ogni piattaforma su cui è implementato Linux, il tipo
 \ctyp{int}, gli altri interi di dimensione inferiore ed i puntatori sono
 atomici. Non è affatto detto che lo stesso valga per interi di dimensioni
 maggiori (in cui l'accesso può comportare più istruzioni in assembler) o per
 le strutture di dati. In tutti questi casi è anche opportuno marcare come
-\direct{volatile} le variabili che possono essere interessate ad accesso
+\dirct{volatile} le variabili che possono essere interessate ad accesso
 condiviso, onde evitare problemi con le ottimizzazioni del codice.
 
 
@@ -4424,7 +4521,7 @@ varie funzioni di libreria, che sono identificate aggiungendo il suffisso
 % LocalWords:  setreuid setregid FIXME ruid rgid seteuid setegid setresuid size
 % LocalWords:  setresgid getresuid getresgid value result argument setfsuid DAC
 % LocalWords:  setfsgid NGROUPS sysconf getgroups getgrouplist groups ngroups
-% LocalWords:  setgroups initgroups patch LIDS CHOWN OVERRIDE Discrectionary PF
+% LocalWords:  setgroups initgroups patch LIDS CHOWN OVERRIDE Discrectionary 
 % LocalWords:  SEARCH chattr sticky NOATIME socket domain immutable append mmap
 % LocalWords:  broadcast multicast multicasting memory locking mlock mlockall
 % LocalWords:  shmctl ioperm iopl chroot ptrace accounting swap reboot hangup