< Les systèmes d'exploitation
Séparation entre programmes systèmes et applicatifs.

Au tout début de l'informatique, les logiciels n'étaient pas compatibles sur une large gamme de matériel. Le logiciel assurait lui-même la gestion du matériel et supportait peu les variations de configuration. Il pouvait être démarré directement à l'allumage de l'ordinateur, sans charger de système d'exploitation.

Avec le temps, les informaticiens ont inventé des techniques d'abstraction matérielle qui permettent à un programme de s'exécuter sur des ordinateurs avec des matériels très différents. Rendre les programmes indépendants du matériel a demandé de revoir l'organisation des logiciels, qui ont dû être découpés en plusieurs programmes séparés :

  • les programmes systèmes gèrent la mémoire et les périphériques ;
  • les programmes applicatifs ou applications délèguent la gestion de la mémoire et des périphériques aux programmes systèmes.

Pour simplifier, l'ensemble des programmes système porte le nom de système d'exploitation.

Anneaux mémoire

Niveaux de privilèges sur les processeurs x86.

L'OS doit garantir que seuls les programmes systèmes ont accès aux périphériques ou aux registres de gestion de la mémoire virtuelle. Pour cela, les processeurs actuels incorporent une technique : les anneaux mémoires. Dans les grandes lignes, le processeur gère deux niveaux de privilèges : un mode noyau pour les programmes systèmes, où les instructions d'accès aux périphériques peuvent s’exécuter, et un mode utilisateur pour les applications, où ces opérations sont interdites.

Ces anneaux mémoire/niveaux de privilèges, sont gérés en partie par le processeur. Celui-ci contient un registre qui précise s'il est en espace noyau ou en espace utilisateur. À chaque accès mémoire ou exécution d'instruction, le processeur vérifie si le niveau de privilège permet l'opération demandée. Lorsqu'un programme effectue une instruction interdite en mode utilisateur, une exception matérielle est levée. Généralement, le programme est arrêté sauvagement et un message d'erreur est affiché. Un programme ne peut changer d'anneau mémoire au cours de son exécution, sous certaines conditions relativement drastiques, afin d'éviter que tout programme s'arroge des droits d'accès aux périphériques sans restrictions.

Sur certains processeurs, on trouve des niveaux de privilèges intermédiaires entre l'espace noyau et l'espace utilisateur. Les processeurs de nos PC actuels contiennent 4 niveaux de privilèges. Le système Honeywell 6180 en possédait 8. À l'origine, ceux-ci ont été inventés pour faciliter la programmation des pilotes de périphériques. Certains d'entre eux peuvent en effet gagner à avoir des niveaux de privilèges intermédiaires entre celui d'une simple application et celui d'un OS. Mais force est de constater que ceux-ci ne sont pas vraiment utilisés, seuls les espaces noyau et utilisateur étant pertinents. Il en est de même pour beaucoup de méthodes de protection mémoire. Une des raisons à cet état de fait est tout simplement la compatibilité entre architectures matérielles différentes. Par exemple, les premières versions de Windows NT n'utilisaient que deux anneaux de privilèges sur les processeurs x86, en partie parce que d'autres jeux d'instructions supportés par Windows n'avaient que deux niveaux de privilèges. Ce n'est pas la seule raison, la facilité de programmation de l'OS devant aussi être prise en compte.

Appels systèmes

Tous les programmes systèmes sont des routines d'interruptions, fournies par l'OS ou les pilotes, qui permettent d'exploiter les périphériques. Sur les PC actuels, où le BIOS fournit des routines de base, l'OS doit modifier le vecteur d'interruption avec les adresses de ses routines. On dit qu'il détourne l'interruption. Les applications peuvent appeler à la demande ces routines via une interruption logicielle : ils effectuent ce qu'on appelle un appel système. Tout OS fournit un ensemble d'appels systèmes de base, qui servent à manipuler la mémoire, gérer des fichiers, etc. Par exemple, linux fournit les appels systèmes open, read, write et close pour manipuler des fichiers, les appels brk, sbrk, pour allouer et désallouer de la mémoire, etc. Évidemment, ceux-ci ne sont pas les seuls : linux fournit environ 380 appels systèmes distincts. Ceux-ci sont souvent encapsulés dans des librairies et peuvent s'utiliser comme de simples fonctions.

L'appel système se charge automatiquement de basculer le processeur dans l'espace noyau. Cette commutation n'est cependant pas gratuite, de même que l'interruption qui lui est associée. Ainsi, les appels systèmes sont généralement considérés comme lents, très lents. Divers processeurs incorporent des techniques pour rendre ces commutations plus rapides, via des instructions spécialisées (SYSCALL/SYSRET et SYSENTER/SYSEXIT d'AMD et Intel), ou d'autres techniques (call gate de Intel, Supervisor Call instruction des IBM 360, etc.).

Le noyau du système d'exploitation

Séparation entre noyau et applications.

La portion du système d'exploitation placée dans l'espace noyau est ce qu'on appelle le noyau du système d’exploitation, le reste de l'OS étant composé d'applications qui servent à afficher une interface graphique ou une ligne de commande, par exemple. Reste que beaucoup de programmes de l'OS peuvent être placés indifféremment dans le noyau ou dans l'espace utilisateur. Mais cela a un coût : exécuter un appel système est très lent, changer de niveau de privilège étant assez couteux. Conserver de bonnes performances impose de diminuer la quantité d'appels systèmes, et donc de placer un maximum de choses en espace noyau. Mais cela se fait au prix de la sécurité, toute erreur de programmation dans le noyau entrainant un écran bleu.

Les types de noyaux : monolithique, micro-noyaux, hybrides

On peut classer les noyaux en plusieurs types, selon l'accent mit sur les performances ou la sécurité.

  • Les noyaux monolithiques placent un maximum de programmes systèmes dans l'espace noyau.
  • Les micro-noyaux préfèrent au contraire placer le plus de choses dans l'espace utilisateur.
  • Les noyaux hybrides, sont un intermédiaire entre les deux précédents.
  • Certaines versions relativement extrêmes de noyaux monolithiques, où tout l'OS est placé dans l'espace noyau, portent le nom de noyaux mégalithiques. De même, on trouve des versions extrêmes de micro-noyaux, où tout l'OS est composé de bibliothèques logicielles exécutées en espace utilisateur, à l'exception du minimum vital. On parle alors d'exokernel ou de nanokernel.

Pour information, les systèmes Unix et Linux sont basés sur des noyaux monolithiques, tandis que les systèmes Windows et Mac OS utilisent des noyaux hybrides qui reprennent les avantages des noyaux monolithiques et des micro-noyaux.

Noyau monolithique modulaire.
Micro noyau hybride simplifié.
Micro noyau simplifié.

Avantages et inconvénients de chaque type de noyau

Chaque type de noyau a ses avantages et ses inconvénients, mais on fait la différence surtout entre les deux extrêmes que sont les micro-noyaux et les noyaux monolithiques. Micro-noyaux et noyau monolithiques sont chacun l'opposé de l'autre du point de vue des performances et de la sécurité.

  • Les micro-noyaux sont très fiables, avec peu d'écrans bleus, mais avec des performances médiocres. La raison tient à ce que la plupart des bogues et erreurs sont dans l'espace utilisateur, ce qui réduit le nombre d'écrans bleus. Avec eux, la majorité des erreurs de programmation n'entrainant pas un crash, mais simplement l'affichage d'un message d'erreur. Mais le nombre d'appels système est nettement plus important que pour les noyaux monolithiques, ce qui est source de performances relativement faibles.
  • Les noyaux monolithiques sont peu fiables, mais performants. Leurs performances excellentes viennent du fait que les appels systèmes à faire sont peu nombreux. Par contre, leur fiabilité est plutôt faible, la majorité des erreurs de programmation de l'OS se trouvant dans le noyau, source de beaucoup d'écrans bleus.
Noyau monolithique
Micro-noyau - appels système et services
Cet article est issu de Wikibooks. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.