X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=prochand.tex;h=eb372537219e9bed125034c8554813a28b77a4dc;hp=a16a9ae22e9977b8b81f2ea51e5ab0ea779f57c9;hb=7208522fd60468969d96dba5d8dd2cbd24b75b89;hpb=7b43a7843d483c826a6ed13224208c615a23c4d6 diff --git a/prochand.tex b/prochand.tex index a16a9ae..eb37253 100644 --- a/prochand.tex +++ b/prochand.tex @@ -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.} -\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 @@ -3952,7 +3952,6 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC. \end{basedescript} - \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. +\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 @@ -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.} -\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 @@ -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. -\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}] @@ -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\_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 @@ -4169,18 +4222,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 +4241,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}