Ancora revisione degli indici, aggiunto CLONE_VM e paragrafo su
[gapil.git] / prochand.tex
index a16a9ae22e9977b8b81f2ea51e5ab0ea779f57c9..eb372537219e9bed125034c8554813a28b77a4dc 100644 (file)
@@ -3629,7 +3629,7 @@ l'operazione, e deve essere specificato con l'uso di una delle costanti
 predefinite del seguente elenco, che illustra quelle disponibili al
 momento:\footnote{alla stesura di questa sezione, cioè con il kernel 3.2.}
 
 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}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 \item[\const{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
 \item[\const{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
@@ -3952,7 +3952,6 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 \end{basedescript}
 
 
 \end{basedescript}
 
 
-
 \subsection{La \textit{system call} \func{clone}}
 \label{sec:process_clone}
 
 \subsection{La \textit{system call} \func{clone}}
 \label{sec:process_clone}
 
@@ -3977,12 +3976,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.
 
 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
 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
 
 La \textit{system call} richiede soltanto due argomenti: il
 primo, \param{flags}, consente di controllare le modalità di creazione del
@@ -4097,15 +4105,19 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa
   riferimento al momento della stesura di questa sezione, cioè con il kernel
   3.2.}
 
   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[\const{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}
   figlio all'indirizzo dato dall'argomento \param{ctid}. Questo flag viene
 \item[\const{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}.
+  utilizzato dalla librerie di gestione dei \textit{thread} ed è presente dal
+  kernel 2.5.49.
+
 \item[\const{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
 \item[\const{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
@@ -4129,12 +4141,39 @@ 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.
 
   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\_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[\const{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[\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\_PARENT}]
 \item[\const{CLONE\_PARENT\_SETTID}]
 \item[\const{CLONE\_PID}]
@@ -4146,20 +4185,34 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa
 \item[\const{CLONE\_THREAD}]
 \item[\const{CLONE\_UNTRACED}]
 \item[\const{CLONE\_VFORK}]
 \item[\const{CLONE\_THREAD}]
 \item[\const{CLONE\_UNTRACED}]
 \item[\const{CLONE\_VFORK}]
-\item[\const{CLONE\_VM}]
+\item[\const{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}
 
 
 \end{basedescript}
 
 
+%TODO sezione separata sui namespace 
+
 %TODO trattare unshare, vedi anche http://lwn.net/Articles/532748/
 
 %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 kcmp aggiunta con il kernel 3.5, vedi
 % https://lwn.net/Articles/478111/
 
 
 %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
 
 % TODO: trattare PTRACE_SEIZE, aggiunta con il kernel 3.1
 % TODO: trattare PTRACE_O_EXITKILL, aggiunta con il kernel 3.8 (vedi
@@ -4169,18 +4222,18 @@ Da fare
 % TODO: trattare PTRACE_O_SUSPEND_SECCOMP, aggiunta con il kernel 4.3, vedi
 % http://lwn.net/Articles/656675/ 
 
 % 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
 
 
 
 % 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 
 
 %
 % TODO l'I/O sulle porte di I/O 
@@ -4188,7 +4241,7 @@ Da fare.
 % non c'entra nulla qui, va trovato un altro posto (altri meccanismi di I/O in
 % fileintro ?)
 
 % 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}
 
 
 %\subsection{La gestione di architetture a nodi multipli}