|
@@ -32,3 +32,33 @@ donné qu'on diminue les changements de contexte et appels systèmes. On garde c
|
|
|
«orchestrateur» pour initialiser chaque nouvel étage mais les modules peuvent
|
|
|
fonctionner de façon indépendante après, du moment que tous les éléments qui
|
|
|
sont liés à l'étage ont été créés.
|
|
|
+
|
|
|
+\section{La notion de processus Zygote}
|
|
|
+
|
|
|
+Afin d'optimiser le démarrage de nouveaux processus, beaucoup de systèmes
|
|
|
+utilisent un processus spécial, appelé «Zygote». Ce processus est responsable de
|
|
|
+créer les nouveaux processus et permet un démarrage plus rapide en
|
|
|
+préchargeant toutes les bibliothèques et préparant toutes les initialisations
|
|
|
+au préalable.
|
|
|
+
|
|
|
+Les nouveaux processus sont alors créés à partir d'un appel système
|
|
|
+\inltype{fork} qui est moins coûteux que la création complète d'un processus
|
|
|
+depuis rien. Mais n'est pas officiellement disponible sous Windows,
|
|
|
+officieusement disponible sur les versions Windows 10 professionnels via les
|
|
|
+détails internes liés à l'implémentation des pico-processus, et ne permet pas de
|
|
|
+pouvoir efficacement faire de l'ASLR entre les différents processus de
|
|
|
+l'application. Ce dernier point existe notamment sur Android, même si des
|
|
|
+mitigations existent.
|
|
|
+
|
|
|
+Le processus Zygote permet également d'efficacement cloisonner les descripteurs
|
|
|
+de fichier à hériter. Mais cela peut être préférée à une méthode plus
|
|
|
+systématique de libération de tous les descripteurs associés au processus.
|
|
|
+
|
|
|
+Néanmoins, la partie la plus intéressante du Zygote concerne le débogage de la
|
|
|
+sandbox. Sous Linux, \texttt{gdb} n'est capable de s'accrocher qu'à un seul
|
|
|
+processus à la fois. Il faut alors choisir avec \texttt{set follow-fork-mode} si
|
|
|
+l'on veut déboguer le processus parent ou bien le processus enfant lors d'un
|
|
|
+appel à \inltype{fork}. Dans l'architecture que l'on va construire, on sera
|
|
|
+suffisament dépendant de la bonne réalisation des opérations demandées pour
|
|
|
+pouvoir attacher des débogueurs au processus Zygote et basculer directement sur
|
|
|
+le processus enfant à chaque création de nouveau processus.
|