mercredi 8 novembre 2017

minix 3

Aujourd'hui j'ai appris que minix 3 est un système d'exploitation des plus utilisés au monde. En fait même Andrew S. Tanenbaum le créateur de minix l'ignorais jusqu'à tout récemment. Depuis 2006 tous les microprocesseurs Intel Core contiennent un processeur secondaire que le fabriquant appelle Management Engine. Ce processeur fonctionne en dehors du processeur principal et du BIOS avec son propre logiciel et a accès à toutes les fonctionnalité de l'ordinateur même s'il n'y a pas de système d'exploitation installé ou même de disque dur. Il y a eu beaucoup de critiques concernant le management Engine et récemment des hackers ont trouvé une méthode pour le désactiver et par la même occasion étudier le logiciel qu'il utilise. C'est là qu'ils ont découvert qu'il utilise une version customisé par Intel du système d'exploitation minix 3. Puisque les processeurs Intel Core sont les plus utilisés dans les ordinateurs de bureau et les laptops ça signifie que minix 3 est un des systèmes d'exploitations les plus utilisés dans le monde et personne n'était au courant!

Qu'est-ce que minix 3

Minix 3 se distingue des systèmes d'exploitation plus connus comme Windows, OSX et GNU/Linux d'une façon remarquable. Contrairement à ces 3 derniers c'est un système d'exploitation à micro noyau, alors que les 3 autres sont basés sur des noyaux monolithiques.

Noyau monolithique

Tous les systèmes basés sur Unix comme OSX, ainsi que ceux basé sur Linux ou encore le noyau NT4 de Windows possèdent un noyau monolithique. Pour comprendre ce qu'est le noyau d'un système d'exploitation vous pouvez consulter l'article suivant: Qu'est-ce qu'un système d'exploitation. Un noyau monolithique comme Linux est un gros module logiciel comprenant des centaines de milliers de lignes de codes. Plus on ajoute de fonctionnalités plus il grossie. Hors Linux existe depuis longtemps et il est devenu très gros.

Micro noyau

Un micro noyau comme celui de minix au contraire implémente un minimum de fonctionnalité et renvoie tous le reste dans l'espace utilisateur. Alors qu'avec Linux, Unix et NT4 tous les pilotes de périphériques sont liés directement au noyau et fonctionne dans l'espace protégé de celui-ci.

Le problème que tente de résoudre les micro noyaux.

Le principal problème que les micro noyaux essaient de résoudre est celui de la sécurité. En effet plus un système contient de lignes de codes plus il a de chance de contenir des erreurs qui peuvent-être exploités de façon malveillante. Comme le noyau d'un système d'exploitation fonctionne au niveau de privilège le plus élevé du processeur. Les erreurs logicielles qui se trouvent dans son code posent une menace majeure à la sécurité mais aussi à la stabilité du système.

Donc la philosophie du micro noyau est de réduire le code qui tourne au niveau de privilège le plus élevé du processeur pour réduire au minimum le risque d'erreurs logicielles. Mais il y a un inconvénient, celui de la vitesse d'exécution. En effet pour accéder aux périphériques les applications doivent faire un appel au noyau de type syscall pour appeler une fonction matérielle. Un syscall est une exception logicielle ça implique un délais qu'on appelle latence. Prenons un exemple, une application veut écrire un bloc de données dans un fichier sur le disque dur. Dans un système monolithique, l'application fait un syscall en passant l'information requise au noyau. l'interruption qui répond au syscall identifie le type de demande et transmet l'information au pilote du disque dur qui effectue l'opération et le résultat de l'opération est retourné à l'application dans le bloc d'information. Dans un micro noyau le pilote est aussi une application donc pour parler au noyau il doit lui aussi faire un syscall donc chaque transaction entre une application et un périphérique implique 2 systcall. Un pour la requête et un pour la réponse du pilote. On double le nombre de syscall et comme je viens de l'écrire chaque syscall implique un délais de réponse. De plus dans un système d'exploitation chaque application existe dans un espace mémoire virtuel inaccessible aux autres applications. Donc lorsque une application veut envoyer de l'information à un périphérique le noyau fait une copie vers l'espace de l'application vers l'espace du pilote et lorsque le pilote répond le noyau copie la réponse dans l'autre sens. Ça fait beaucopu de données à copier.

Cette façon de faire est très sécuritaire mais très lente. J'ai l'occasion d'expérimenter cette lenteur chaque fois que j'utilise mon PlayBook qui fonctionne avec le système d'exploitation QNX qui est basé sur un micro noyau.

Les recherches se poursuivent pour améliorer la performance des systèmes d'exploitations à micro noyau mais ils ne seront jamais aussi rapides que les systèmes monolithiques. Ils sont utilisés principalement pour leur sécurité mais aussi pour leur modularité qui permet de réduire la taille du système en enlevant simplement les modules qui ne sont pas nécessaires à l'application. C'est sans doute ce qui a incité Intel à utiliser minix 3 pour son Management Engine.

Cette découverte va peut-être intéresser plus de développeurs au projet minix 3 qui pour le moment est plutôt anémique.