+La funzione tradizionale con cui creare un nuovo processo in un sistema
+Unix-like è, come illustrato in sez.~\ref{sec:proc_fork}, \func{fork}, ma con
+l'introduzione del supporto del kernel per i \textit{thread} (vedi
+cap.~\ref{cha:threads}), si è avuta la necessità di una interfaccia che
+consentisse un maggiore controllo sulla modalità con cui vengono creati nuovi
+processi, che poi è stata utilizzata anche per fornire ulteriore supporto per
+le varie tecnologie di virtualizzazione dei processi (i cosidetti
+\textit{container}).
+
+Per far questo l'interfaccia per la creazione di un nuovo processo è stata
+implementata una nuova \textit{system call}, \texttt{sys\_clone}, che consente
+di reimplementare anche la tradizionale \func{fork}. La \textit{system call}
+richiede due argomenti, \param{flags}, che consente di controllare le modalità
+di creazione del nuovo processo e \param{child\_stack}, che deve essere
+indicato se si intende creare un \textit{thread} in cui la memoria viene
+condivisa fra il processo chiamante ed il nuovo processo creato. L'esecuzione
+del programma creato da \param{child\_stack} riprende, come per \func{fork},
+da dopo l'esecuzione della stessa.
+
+La necessità di avere uno \itindex{stack} \textit{stack} alternativo c'è solo
+quando si intende creare un \textit{thread}, in tal caso infatti il nuovo
+processo vede esattamente la stessa memoria del processo chiamante, e nella
+sua esecuzione andrebbe a scrivere sullo \textit{stack} usato anche da questi,
+il che comporterebbe immediatamente la presenza di \itindex{race~condition}
+\textit{race conditions} all'esecuzione di una funzione da parte di entrambi
+(si ricordi quanto visto in sez.~\ref{sec:proc_mem_layout} riguardo all'uso
+dello \textit{stack}).
+
+Per evitare questo è allora necessario che il chiamante allochi
+preventivamente un'area di memoria (in genere lo si fa con una \func{malloc})
+che la funzione imposterà come \textit{stack} del nuovo processo, avendo
+ovviamente cura di non utilizzarla direttamente. Si tenga presente inoltre che
+in molte architetture lo \textit{stack} cresce verso il basso, pertanto in tal
+caso non si dovrà specificare per \param{child\_stack} il puntatore restituito
+da \func{malloc}, ma un puntatore alla fine del buffer con essa allocato.
+
+Dato che tutto ciò serve 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 il valore \val{NULL}
+per \param{child\_stack}, nel qual caso si applicherà la semantica del
+\itindex{copy-on-write} \textit{copy on write} illustrata in
+sez.~\ref{sec:proc_fork}, le pagine dello \textit{stack} verranno
+automaticamente copiate come le altre e il nuovo processo avrà un suo
+\textit{stack}.
+
+