Browse Source

chapters/sandbox_architecture: ajout de précisions sur zygote

Alexandre Janniaux 6 years ago
parent
commit
c882b2362c
1 changed files with 30 additions and 0 deletions
  1. 30 0
      chapters/sandbox_architecture.tex

+ 30 - 0
chapters/sandbox_architecture.tex

@@ -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
 «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
 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.
 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.