7. Conception et architectures de noyau
7.1 Objectifs et langages
Du point de vue de l'utilisateur, un SE devrait être pratique, fiable et rapide. Du point de vue de la conception, il devrait aussi être compréhensible, modifiable, testable et portable.
Ces objectifs peuvent entrer en tension. Une communication très directe améliore parfois les performances, mais augmente le couplage et l'étendue du code privilégié. Une séparation stricte améliore l'isolation, mais ajoute des transitions et des messages.
Les systèmes emploient plusieurs langages :
- assembleur pour certaines transitions et opérations proches du matériel;
- C pour une grande partie du noyau;
- C, C++ et scripts pour les programmes système.
7.2 Comparaison des architectures
| Architecture | Organisation | Avantages | Limites et coûts |
|---|---|---|---|
| Monolithique | La plupart des services résident dans un grand noyau privilégié | Appels internes directs et rapides | Une erreur peut compromettre tout le système; dépendances et maintenance plus difficiles |
| Multicouche | Chaque couche utilise surtout les services des couches inférieures | Responsabilités claires, raisonnement et test facilités | Découpage parfois artificiel; traversées supplémentaires |
| Micro-noyau | Le noyau garde un minimum; des services résident en espace utilisateur et communiquent par messages | Isolation, extensibilité, moins de code privilégié | Appels système, messages et changements de contexte plus nombreux |
| Modulaire | Des composants du noyau sont chargés dynamiquement selon les besoins | Flexibilité, noyau actif plus petit | Les modules demeurent privilégiés et peuvent compromettre le noyau |
| Hybride | Combinaison pragmatique de plusieurs modèles | Compromis adapté aux besoins réels | Architecture moins pure et plus difficile à classer |
Linux est décrit comme principalement monolithique et modulaire. Windows combine également un noyau fortement intégré à des idées issues d'autres architectures. Il faut comprendre les compromis plutôt que chercher une étiquette absolue.
7.3 Micro-noyau contre noyau monolithique
Dans un noyau monolithique, deux fonctions internes peuvent communiquer directement. Dans un micro-noyau, des services séparés passent davantage par des messages et des entrées contrôlées.
Le micro-noyau facilite le remplacement ou le test isolé d'un service et limite la quantité de code exécutée avec les privilèges maximaux. Le prix est une surcharge de communication. Le compromis central est donc modularité et isolation contre rapidité des interactions.