sandbox_architecture.tex 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. \section{La notion d'étage}
  2. L'architecture que nous allons construire se place contextuellement dans celle
  3. de VLC. Celle-ci se base fortement sur la réalisation d'un pipeline de
  4. traitement dynamique, créé au fur et à mesure de la lecture des flux multimédia.
  5. Les différents éléments de ce pipeline seront créés éventuellement dans la même
  6. zone de privilège, éventuellement dans une zone de privilège déjà existante ou
  7. même donnera lieu à la création d'une nouvelle zone de privilège. Pour désigner
  8. cette nouvelle réalité du point de vue du client, on crée la notion d'étage, ou
  9. «stages», qui permet de ne pas forcément indiquer comment sera créé la partie du
  10. pipeline demandée par le client.
  11. \section{Le modèle broker}
  12. Dans ce modèle, on considère un processus privilégié qu'on appelle broker, qui
  13. va contrôler tous les échanges entre les différents processus qu'on appelle
  14. workers, mais également leur cycle de vie et leurs permissions et accès.
  15. Le broker est donc en charge de faire le routage des différents messages, de
  16. transmettre les ressources et faire la vérification d'accès. Il est également
  17. utile pour vérifier que les processus workers sont encore en vie et signaler les
  18. erreurs.
  19. \section{Le modèle orchestrateur}
  20. Dans ce modèle, on considère un processus privilégié qu'on appelle
  21. orchestrateur. Celui-ci n'est plus au centre des communications inter-processus
  22. mais permet d'initialiser les connexions entre deux workers qui vont ensuite
  23. discuter directement. On doit donc s'attendre à de meilleures performances étant
  24. donné qu'on diminue les changements de contexte et appels systèmes. On garde cet
  25. «orchestrateur» pour initialiser chaque nouvel étage mais les modules peuvent
  26. fonctionner de façon indépendante après, du moment que tous les éléments qui
  27. sont liés à l'étage ont été créés.
  28. \section{La notion de processus Zygote}
  29. Afin d'optimiser le démarrage de nouveaux processus, beaucoup de systèmes
  30. utilisent un processus spécial, appelé «Zygote». Ce processus est responsable de
  31. créer les nouveaux processus et permet un démarrage plus rapide en
  32. préchargeant toutes les bibliothèques et préparant toutes les initialisations
  33. au préalable.
  34. Les nouveaux processus sont alors créés à partir d'un appel système
  35. \inltype{fork} qui est moins coûteux que la création complète d'un processus
  36. depuis rien. Mais n'est pas officiellement disponible sous Windows,
  37. officieusement disponible sur les versions Windows 10 professionnels via les
  38. détails internes liés à l'implémentation des pico-processus, et ne permet pas de
  39. pouvoir efficacement faire de l'ASLR entre les différents processus de
  40. l'application. Ce dernier point existe notamment sur Android, même si des
  41. mitigations existent.
  42. Le processus Zygote permet également d'efficacement cloisonner les descripteurs
  43. de fichier à hériter. Mais cela peut être préférée à une méthode plus
  44. systématique de libération de tous les descripteurs associés au processus.
  45. Néanmoins, la partie la plus intéressante du Zygote concerne le débogage de la
  46. sandbox. Sous Linux, \texttt{gdb} n'est capable de s'accrocher qu'à un seul
  47. processus à la fois. Il faut alors choisir avec \texttt{set follow-fork-mode} si
  48. l'on veut déboguer le processus parent ou bien le processus enfant lors d'un
  49. appel à \inltype{fork}. Dans l'architecture que l'on va construire, on sera
  50. suffisament dépendant de la bonne réalisation des opérations demandées pour
  51. pouvoir attacher des débogueurs au processus Zygote et basculer directement sur
  52. le processus enfant à chaque création de nouveau processus.