Correzioni rimaste indietro ed espansione funzioni del resolver.
[gapil.git] / prochand.tex
index df3eadc7abb31c04d2a544106bc52de28b0cd28d..27361879e79dadd931019f4f2b42d469e6e8131f 100644 (file)
@@ -1,6 +1,6 @@
 %% prochand.tex
 %%
-%% Copyright (C) 2000-2015 by Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2016 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",
@@ -145,8 +145,9 @@ 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}
 
@@ -209,7 +210,7 @@ riparte dal numero più basso disponibile a partire da un minimo di
   \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
@@ -1297,8 +1298,8 @@ 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.\\
-    \constd{WCONTINUED}& Ritorna quando un processo figlio che era stato
+    \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
@@ -1673,8 +1674,8 @@ 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 \constd{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
+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
@@ -1930,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
@@ -2961,8 +2962,8 @@ corrente. Benché la funzione sia utilizzabile anche con processi sottoposti a
 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 \macrod{\_POSIX\_PRIORITY\_SCHEDULING} che è definita
-nell'\textit{header file} \headfiled{sched.h}.
+macro \macro{\_POSIX\_PRIORITY\_SCHEDULING} che è definita nell'\textit{header
+  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
@@ -3056,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
@@ -3197,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
@@ -3226,11 +3227,14 @@ se esso è già presente in un insieme, sono le seguenti:
 \fdecl{void \macrod{CPU\_ZERO}(cpu\_set\_t *set)}
 \fdesc{Inizializza un insieme di processori vuoto \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}.} 
+\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}.} 
+\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}.} 
+\fdesc{Controlla se il processore \param{cpu} è nell'insieme di
+  processori \param{set}.}  
 }
 \end{funcbox}}
 
@@ -3890,7 +3894,7 @@ 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
+  \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
@@ -4190,6 +4194,10 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa
 % \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}]
@@ -4233,6 +4241,10 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa
 % 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/
 
@@ -4356,7 +4368,7 @@ 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
@@ -4473,8 +4485,8 @@ parte del programmatore.
 
 In genere le funzioni di libreria non sono rientranti, molte di esse ad
 esempio utilizzano variabili statiche, la \acr{glibc} però mette a
-disposizione due macro di compilatore, \macrod{\_REENTRANT} e
-\macrod{\_THREAD\_SAFE}, la cui definizione attiva le versioni rientranti di
+disposizione due macro di compilatore, \macro{\_REENTRANT} e
+\macro{\_THREAD\_SAFE}, la cui definizione attiva le versioni rientranti di
 varie funzioni di libreria, che sono identificate aggiungendo il suffisso
 \code{\_r} al nome della versione normale.