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
\end{basedescript}
-
\subsection{La \textit{system call} \func{clone}}
\label{sec:process_clone}
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
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
- 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
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\_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}
+%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 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_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
% 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}