Un exo-noyau ou exokernel est un type de système d’exploitation dont l'architecture logicielle est dite modulaire. En informatique, un noyau ou kernel est le premier élément codé venant exploiter les ressources matérielles de l'ordinateur. Il existe différents types de noyaux qui supportent des systèmes d’exploitations et qui fournissent des mécanismes d’abstraction du matériel tel que la mémoire, le (ou les) processeur(s), le réseau informatique ou les différents périphériques matériels. Le noyau facilite également la communication entre les processus grâce à diverses abstractions logicielles.

Contrairement aux noyaux dit monolithiques, l'exo-noyau et son architecture ont une approche plus radicale. ἔξω (éxo) signifie en grec ancien « hors de » : un exo-noyau est donc un système fonctionnant dans l’espace utilisateur et non dans l’espace noyau. La philosophie de l'exo-noyau est : l’élimination de toute abstraction d'un système d'exploitation pour que l'utilisateur soit au plus près du matériel. C'est en 1995 qu'une équipe du MIT (Massachusetts Institute of Technology) commence son étude et le développement de ce type de noyau ; initiant en même temps de vifs débats avec les tenants des noyaux monolithiques. La philosophie et les principes définis pour ce projet ont modifié la vision de la performance, la gestion des ressources matérielles et la sécurité au sein d'un système d’exploitation. Les instanciations et l'utilisation de l'exo-noyau ainsi que des outils et applications spécifiques n'ont cessé de se multiplier et d'évoluer depuis sa genèse.

Motivations Les problèmes qu’apportent l'abstraction des ressources matérielles d'un système monolithique sont les suivants : Manque de fiabilité À cause d'un code lourd et des mécanismes complexes, la performance d'un système dit monolithique est dégradée. Manque d’adaptabilité Le code dense empêche une évolution simplifiée. D'autre part, les applications dépendant fortement d'un système d'exploitation, celles-ci sont difficilement adaptables au détriment des autres. Performance en retraitÀ cause des abstractions matérielles excessives, les programmes se trouvent loin des ressources et les applications n'utilisant pas ces abstractions en pâtissent. L'OS unique cherche à faire un compromis pénalisant une application au détriment d'une autre. Manque de flexibilité Si les applications pouvaient passer outre au système d'exploitation et implémenter leurs propres abstractions, leur flexibilité serait acceptable. Il n'en est rien car cette méthode serait trop coûteuse, compliquée et mal à propos selon la philosophie d'un système monolithique.

De ce fait, les applications ne pouvant pas faire abstraction de la couche OS, l'ensemble est lent, inflexible et instable.

Les buts de l'exo-noyau sont clairement établis : Donner aux utilisateurs un système au code léger et simple pour que les performances soient au rendez-vous; Permettre aux développeurs de disposer d'un environnement propice aux évolutions; Rapprocher les applications au maximum de la couche matérielle pour optimiser les performances; Permettre aux programmes de définir eux-mêmes leurs abstractions matérielles.

Philosophie et Principes

La philosophie et les principes de l'exo-noyau sont établis par l'équipe du MITSite du MIT - MIT (Massachusetts Institute of Technology) travaillant sur son étude et son développement. Ceux-ci sont repris et mis en œuvre au sein de son architecture modulaire :

Séparation de la sécurité (protection) et de la gestion des ressources L'exo-noyau limite la gestion des ressources à des fonctions nécessaires à la sécurité : allocation, révocation, partage et droits. Les applications ayant accès à l’ensemble des mécanismes du système, sauf la sécurité, l'évolutivité du noyau est optimisé. Exposition du matériel Les applications ont accès à l'ensemble des ressources matérielles en empruntant des liens sécurisés. Elles ont une vue complète des paramètres du matériel. Le niveau d'accès est le plus bas qu'on puisse donner de manière sécurisée. Exposition de l'allocation L'exo-noyau permet aux applications de solliciter le matériel durant la phase d'allocation en leur donnant le contrôle du niveau d'abstraction et de performance. Exposition de l’acquittement L'exo-noyau donne aux applications l'accès aux règles et politiques d'acquittement. Le contrôle de la libération des ressources est total. Une protection au niveau le plus bas Pour alléger efficacement la gestion et le partage des ressources, l'exo-noyau place son niveau d'action le plus bas possible. Exemple d'un disque-dur : l'accès est donné au niveau des blocs (gestion en mode bloc) du disque au lieu des partitions car celles-ci constituent déjà une abstraction de haut-niveau. Exposition des noms

L'exo-noyau utilise au maximum le nom physique des ressources. L'utilisation d'alias ou d'éléments virtuels alourdit les processus et coûte du temps. Exposition de l'information

L'exo-noyau expose toutes les informations du niveau matériel aux applications. Les programmes ont donc une vue parfaite des ressources utilisées ou libres. Les noyaux monolithiques ne montrent qu'une partie de l'information ou de manière déguisée, ce qui nuit à la souplesse et la performance.

Historique

Le MIT et l'exo-noyau

Dans les années 1990, certains chercheurs du MIT (Massachusetts Institute of Technology) se sont penchés sur les systèmes d'exploitations monolithiques actuels qui, selon eux, soulèvent plusieurs problèmes de conception dus à la volonté d'abstraction des ressources physiques d'un ordinateur. Le résultat de cette approche : une performance, une adaptabilité et une flexibilité qui sont en retraits.

La solution : l’élimination complète des abstractions engendrées par un système d'exploitation!

C'est ainsi que Dawson EnglerDawson Engler, Professeur du MIT - Dawson Engler et Frans KaashoekFrans Kaashoek, Professeur du MIT - Frans Kaashoek ont entrepris d'étudier et de développer un nouveau type de noyau informatique exposant la partie matérielle d'un système (non sans sécurités...) afin d’obtenir le but recherché : un système fonctionnant en espace utilisateur ayant une adaptabilité accrue, une meilleure efficacité et une flexibilité d'utilisation des applications pour tendre à plus de performance.

L'exo-noyau ou exokernel a vu le jour à la suite du concept établi par ses pères fondateurs cités précédemment.

De la simple étude au développement de leurs exo-noyaux, l'équipe du MIT a défini un nouveau standard qui va être suivi et repris par de nombreux autres chercheurs, développeurs et projets afin de s'adapter aux nouveaux besoins et aux technologies récentes.

L'exo-noyau face aux autres

Dès le début, le challenge de l'exo-noyau était de prouver que ses qualités lui permettait de tenir tête aux autres systèmes dits monolithiques, aussi performants soient-ils. En effet, d'après des tests effectués en laboratoire (MIT), un des premiers prototypes d'exo-noyau donnait des résultats remarquables : face à Ultrix qui est un système monolithique mature UNIX, l'exo-noyau était 100 fois plus rapide que son concurrent en exécutant la plupart des primitives du noyau. Il a alors été prouvé que de par son architecture, le système monolithique était inapproprié pour plusieurs raisons : l’inefficacité de la gestion des ressources matérielles et l'inflexibilité de modification du code qui amène au découragement. Grâce à son architecture différente et sa façon de multiplexer de manière sécurisée les ressources mises à sa disposition, l'exo-noyau définit une nouvelle vision architecturale : il utilise plusieurs mécanismes qui permettent de s'abroger d'un système d'exploitation.

De nombreux tests de performances ou benchmark ont été effectués pour prouver le gain de performances.

Le concept et son évolution 1995Le concept de l'exo-noyau était clair : abolir le problème des systèmes monolithiques en terme d'abstractions des ressources physiques et permettre aux développeurs d'être au plus près du matériel. Flexibilité et adaptabilité sont les maîtres mots. Le premier exo-noyau développé par l'équipe du MIT était dédié au processeur x86 en version 32 bits : « Xok » reste le noyau modulaire développé par l'équipe de Dawson Engler et Frans Kaashoek le plus connu et le plus utilisé. La distribution communément employée est « Xok/ExOS »Page de présentation de la distribution Exopc « Xok/ExOS » - Exopc. En parallèle de « Xok », l'équipe du MIT a développé « Aegis » qui est un noyau dédié à l'architecture MIPS.

1996 Le MIT développe « Glaze » : exo-noyau expérimental dédié à l'architecture « FUGU » multiprocesseur.

2000 « Xok » a été utilisé par une autre équipe américaine pour développer des bibliothèques et des applications en environnement multithreading pour des besoins plus évolués. « SMP-Xok » a alors vu le jour dans la même période : exo-noyau dédié à l'architecture x86 32 bits multiprocesseur. De par sa simplicité et sa légèreté de code, l'exo-noyau intéresse le domaine universitaire : « Nemesis »Page de présentation du projet « Nemesis » - Nemesis, noyau d'étude, a vu le jour à l'université de CambridgeSite de l'université de Cambridge - Université de Cambridge. Ce noyau a pour avantage d'être implémenté pour de nombreuses plateformes : x86, RISC 64 bits et StrongARM.

2003 Un groupe de chercheurs de l'université des sciences et technologies de LilleSite de l'université de Lille 1 - Université de Lille 1, se penchent sur le sujet de l'exo-noyau embarqué (encarté) temps réel : « Camille » puis « Camille RT » (version temps réel) est destiné aux systèmes RISC et CISC.

2010 Un groupe de chercheurs américains a développé l'exo-noyau « XomB »Page de présentation du projet « XomB » - XomB dédié à l'architecture x86 64 bits multiprocesseur.

Depuis 2013 Le projet Xen développe l'exo-noyau « Mirage »Page du projet « Xen - Mirage OS » - Mirage OS (x86) dédié au cloud computing.

Architecture du système exo-noyau

L'exo-noyau L'exo-noyau est spécifique au type de processeur (se reporter à Inventaire des exo-noyaux pour plus d'informations). Quel que soit le type du système, le noyau protège, multiplexe et partage équitablement les ressources physiques de manière dédiée. Son code est léger et se veut ouvert, modifiable et adaptable. Au sein d'un système exo-noyau, la notion importante de la séparation de la protection et de la gestion des ressources s'applique comme suit : le noyau protège les ressources matérielles mais délègue le rôle de la gestion de celles-ci aux bibliothèques et applications.

Chargement de code

Une des propriétés importantes de l'exo-noyau et qui est utilisée par un système monolithique est le chargement de code (downloading code).

Ce mécanisme permet une souplesse d’adaptation et autorise le noyau à être flexible en fonction de son environnement. Le noyau peut demander du chargement direct de code pour un contrôle ou lorsqu'il a un doute sur une application : intégrité, sécurité, etc...

Une application de cette technologie : Dynamic Packet Filter (DPF), le filtre dynamique de paquets programmable (pare-feu) implémenté par l'exo-noyau. « DPF » utilise de la génération dynamique de code et filtre + démultiplexe les paquets reçus avant de les faire parvenir à la couche supérieure. Le mécanisme « ASH » (Application-Specific Safe Handlers) est associé au « DPF » pour la partie notification aux applications. Il utilise également du code chargé lors de l'arrivée d'un flux réseau.

Multiplexage des ressources

Le multiplexage des ressources permet à l'exo-noyau d'être souple et performant. En multiplexant les ressources du processeur, de la mémoire, du stockage et du réseau, plusieurs applications ont accès à celles-ci parallèlement et de manière équitable. Le détail de ce mécanisme est développé dans Les ressources et leur gestion.

Les liens sécurisés (Secure Bindings)