Le noyau d'un système d'exploitation est
lui-même un logiciel, mais ne peut cependant utiliser tous les
mécanismes d'abstraction qu'il fournit aux autres logiciels. Son
rôle central impose par ailleurs des performances élevées.
Cela fait du noyau la partie la plus critique d'un système
d'exploitation et rend sa conception et sa programmation
particulièrement délicates. Plusieurs techniques sont mises en
oeuvre pour simplifier la programmation des noyaux tout en garantissant de
bonnes performances.
En informatique, le noyau d'un système d'exploitation est
le logiciel qui assure :
· la communication entre les logiciels et le
matériel ;
· la gestion des divers logiciels
(tâches) d'une machine (lancement des programmes,
ordonnancement...) ;
· la gestion du matériel (mémoire,
processeur, périphérique, stockage...).
La majorité des systèmes d'exploitation est
construite autour du noyau. L'existence d'un noyau, c'est-à-dire d'un
programme unique responsable de la communication entre le matériel et le
logiciel, résulte de compromis complexes portant sur des questions de
performance, de sécurité et
d'architecture des processeurs.
L'existence d'un noyau présuppose selon Andrew
Tanenbaum6 une partition virtuelle de la
mémoire vive physique en deux régions
disjointes, l'une étant réservée au noyau (l'espace
noyau) et l'autre aux applications (l'espace utilisateur). Cette
division, fondamentale, de l'espace mémoire en un espace noyau et un
espace utilisateur contribue beaucoup à donner la forme et le contenu
des actuels systèmes généralistes (GNU/Linux,
Windows, Mac OS X, etc.), le noyau ayant de grands pouvoirs sur
l'utilisation des ressources matérielles, en particulier de la
mémoire. Elle structure également le travail des
développeurs : le développement de code dans l'espace noyau est
a priori plus délicat que dans l'espace utilisateur car la
mémoire n'y est pas protégée. Ceci implique que des
erreurs de programmation, altérant éventuellement les
instructions du noyau lui-même, sont potentiellement beaucoup plus
difficiles à détecter que dans l'espace utilisateur où de
telles altérations sont rendues impossibles par le mécanisme de
protection.
6 Andrew Tanenbaum, Operating Systems: Design and
Implementation, Prentice Hall, 3rd ed. (ISBN 0-13-142938-8), chapitre 1,3
- 1,4 - 4.
5
Le noyau offre ses fonctions (l'accès aux ressources
qu'il gère) au travers des appels système. Il transmet ou
interprète les informations du matériel via des interruptions.
C'est ce que l'on appelle les entrées et sorties.
Diverses abstractions de la notion d'application
sont fournies par le noyau aux développeurs. La plus courante est
celle de processus (ou tâche). Le noyau du système d'exploitation
n'est en lui-même pas une tâche, mais un ensemble de fonctions
pouvant être appelées par les différents processus pour
effectuer des opérations requérant un certain niveau de
privilèges. Le noyau prend alors en général le relais du
processus pour rendre le service demandé et lui rend le contrôle
lorsque les actions correspondantes ont été
réalisées.
Il peut arriver cependant que le processus puisse poursuivre
une partie de son exécution sans attendre que le service ait
été complètement réalisé. Des
mécanismes de synchronisation sont alors nécessaires entre le
noyau et le processus pour permettre à celui-ci, une fois qu'il est
arrivé au point où il a besoin que le service ait
été rendu, d'attendre que le noyau lui notifie l'exécution
effective du service en question.
Un processeur est capable d'exécuter un seul
processus, un multiprocesseur est capable de gérer autant de processus
qu'il a de processeurs. Pour pallier cet inconvénient majeur, les noyaux
multitâches permettent l'exécution de plusieurs processus sur un
processeur, en partageant le temps du processeur entre les processus.
Lorsque plusieurs tâches doivent être
exécutées de manière parallèle, un noyau
multitâche s'appuie sur les notions de :
· commutation de contexte :
(context switch en anglais) en informatique consiste à
sauvegarder l'état d'un processus pour restaurer à la place celui
d'un autre dans le cadre de l'ordonnancement d'un système d'exploitation
multitâche.
· ordonnancement : c'est le fait
d'ordonner des tâches à exécuter selon certaines
contraintes. Ces tâches peuvent être l'exécution
d'opération sur les entrées-sorties ou le traitement de
processus. Les contraintes peuvent être temporelles ou dimensionnelles.
;
· temps partagé.
Les entrées et les sorties font l'objet d'un
traitement spécifique par l'ordonnanceur. De l'anglais
scheduler, il désigne dans un système d'exploitation le
composant du noyau chargé de choisir l'ordre d'exécution des
processus d'un ordinateur. Il s'avère donc important de mettre un accent
sur les fonctions remplies par un noyau.