X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=prochand.tex;h=3a142fc9daf884e4626ab2e79eb6608cafa45942;hp=97fc8ffa7cf6ba9970f443334117951ceb743170;hb=570997eb16e7228f83d94108b9cb095b7c7a0f2a;hpb=139b022770db438fb1caf2c111e466dd72071592 diff --git a/prochand.tex b/prochand.tex index 97fc8ff..3a142fc 100644 --- a/prochand.tex +++ b/prochand.tex @@ -3975,13 +3975,13 @@ Dato che tutto ciò è necessario solo per i \textit{thread} che condividono la memoria, la \textit{system call}, a differenza della funzione di libreria che vedremo a breve, consente anche di passare per \param{child\_stack} il valore \val{NULL}, che non imposta un nuovo \textit{stack}. Se infatti si crea un -processo, questo ottiene un suo nuovo spazio degli indirizzi,\footnote{è - sottinteso cioè che non si stia usando il flag \const{CLONE\_VM} che vedremo - a breve.} ed in questo caso si applica la semantica del -\itindex{copy~on~write} \textit{copy on write} illustrata in -sez.~\ref{sec:proc_fork}, per cui le pagine dello \textit{stack} verranno -automaticamente copiate come le altre e il nuovo processo avrà un suo -\textit{stack} totalmente indipendente da quello del padre. +processo, questo ottiene un suo nuovo spazio degli indirizzi (è sottinteso +cioè che non si stia usando il flag \const{CLONE\_VM} che vedremo a breve) ed +in questo caso si applica la semantica del \itindex{copy~on~write} +\textit{copy on write} illustrata in sez.~\ref{sec:proc_fork}, per cui le +pagine dello \textit{stack} verranno automaticamente copiate come le altre e +il nuovo processo avrà un suo \textit{stack} totalmente indipendente da quello +del padre. Dato che l'uso principale della nuova \textit{system call} è quello relativo alla creazione dei \textit{thread}, la \acr{glibc} definisce una funzione di @@ -4041,7 +4041,7 @@ utilizzati soltanto se si sono specificati rispettivamente i flag La funzione ritorna un l'identificatore del nuovo \textit{task}, denominato \texttt{Thread ID} (da qui in avanti \ids{TID}) il cui significato è analogo al \ids{PID} dei normali processi e che a questo corrisponde qualora si crei -un processo. +un processo ordinario e non un \textit{thread}. Il comportamento di \func{clone}, che si riflette sulle caratteristiche del nuovo processo da essa creato, è controllato principalmente @@ -4054,9 +4054,28 @@ elenco, che illustra quelle attualmente disponibili:\footnote{si fa \begin{basedescript}{\desclabelwidth{2.cm}\desclabelstyle{\nextlinelabel}} \item[\const{CLONE\_CHILD\_CLEARTID}] cancella il valore del \ids{TID} -\item[\const{CLONE\_CHILD\_SETTID}] -\item[\const{CLONE\_FILES}] -\item[\const{CLONE\_FS}] + 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}. +\item[\const{CLONE\_FILES}] se impostato il nuovo processo condividerà con il + padre la \itindex{file~descriptor~table} \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 \textit{file descriptor flag} di un \textit{file + descriptor} verrà per entrambi. + + Se non viene impostato il processo figlio eredita una copia della  + \itindex{file~descriptor~table} \textit{file descriptor table} del padre e + vale la semantica classica della gestione dei \textit{file descriptor}, che + costituisce il comportamento 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 + condividerà con il padre le informazioni + \item[\const{CLONE\_IO}] \item[\const{CLONE\_NEWIPC}] \item[\const{CLONE\_NEWNET}]