Introduction et concepts généraux
Les principaux concepts
L'objectif des systèmes d'exploitation est de rendre le système plus facile à utiliser grâce à l'abstraction des périphériques, et d'améliorer l'efficacité du système en répartissant les ressources efficacement. Un système d'exploitation doit pouvoir évoluer facilement, protéger les différents programmes les uns des autres et assurer la sécurité vis-à-vis des autres utilisateurs.
Les systèmes d'exploitation proposent une interface entre l'utilisateur et la machine. C'est une interface uniforme d'accès aux périphériques (détails techniques cachés) qui permet une exécution de programmes tout en conservant un accès contrôlé aux données. Les erreurs sont gérées proprement (signalement et réaction) et l'OS peut fournir des statistiques d'utilisation et de fonctionnement.
Un processus possède un contexte mémoire propre (exécution indépendante des autres processus) et un fil d'exécution propre. L'exécution concurrente de processus permet de maximiser l'utilisation des ressources matérielles.
La gestion mémoire se fait via l'isolation des processus ce qui empêche un processus d'accéder à la mémoire d'un autre. Cela est possible grâce à la mémoire virtuelle et au support matériel. Cette allocation est transparente (pas de contraintes sur le programmeur).
La protection des données est assurée par le contrôle des autorisations (accès aux données critiques du système, accès et modification des données des utilisateurs) et par l'authentification des utilisateurs.
L'ordonnancement et la gestion des ressources visent un accès aux ressources équitable pour les travaux de même type, tout en distinguant des classes de travaux. Le contrôle est dynamique, ce qui permet une certaine efficacité.
Structure des systèmes
Un système d'exploitation est constitué de 3 composantes principales :
- Le noyau, qui est le cœur du système : il pilote les périphériques et fournit l'interface vers les programmes utilisateur ;
- Les bibliothèques utilisateur de bas niveau (qui encapsulent les appels système pour communiquer avec le noyau) ;
- Les applications.
Cette infrastructure est possible grâce à plusieurs mécanismes, dont la gestion des processus, la gestion mémoire, les systèmes de fichiers et le stockage, l'ordonnancement, la communication entre processus et le réseau.
Les noyaux
Un noyau monolithique est constitué d'un ensemble de procédures pouvant toutes s'appeler les unes les autres ; il est souvent découpé en procédures principales, procédures de services et procédures utilitaires.
Les noyaux en couche représentent une tentative d'organisation des noyaux monolithiques ; cependant, les limites entre les couches sont difficiles à définir (la gestion mémoire a besoin des I/O pour remplir les pages, les I/O ont besoin de mémoire pour allouer des tampons intermédiaires). De plus, la traversée des couches est pénalisante pour les performances.
Les noyaux modulaires permettent le chargement/déchargement dynamique de code optionnel (pilotes pour périphériques, fonctionnalités spécifiques). Ils permettent la réduction du noyau initial et la possibilité d'évolution dynamique sans redémarrage.
Les micronoyaux
Les noyaux monolithiques sont trop gros, pas organisés (même avec des couches), la sécurité est difficile à intégrer car trop d'interactions sont possibles, et ils sont difficiles à faire évoluer. De ce constat découlent les micronoyaux, qui ne contiennent que le strict nécessaire (gestion des espaces d'adressage, ordonnancement, communication entre processus) ; le reste est déporté dans des processus serveurs dédiés, en espace utilisateur.
Leur conception repose sur l'utilisation d'un serveur pour chaque tâche et sur des interfaces simples et uniformes, et vise l'extensibilité et la flexibilité tout en assurant la fiabilité.
La comparaison de performance entre un micronoyau et un noyau monolithique est complexe, car peu de systèmes généralistes répandus reposent entièrement sur un micronoyau (exemples de micronoyaux : QNX, MINIX 3, seL4 ; le noyau XNU de macOS est hybride). Le coût principal d'un micronoyau vient des communications entre processus, plus fréquentes.