Systèmes d'exploitation - Programmation d'un Noyau / OS

Décembre 2016


Programmer son propre noyau


Introduction

Je ne suis pas certain de l'utilité de programmer soi-même un noyau de système d'exploitation, étant donné qu'il en existe déjà qui sont libres, adaptables et relativement portables (exemple: Linux, GNU Hurd, etc...)

Mais ça peut être tout simplement passionnant de savoir comment se déroule la vie dans les abysses de votre ordinateur :-)

Et puis d'abord, c'est quoi un noyau?
Un noyau c'est ça.

Cet article n'a pas pour prétention de vous expliquer comment programmer un noyau, étant donné que je suis probablement aussi néophyte que vous dans le domaine. Ceci dit, je vais essayer de regrouper quelques ressources afin de faciliter la recherche d'informations dans le domaine.
Notez que je ne me suis concentré que sur les architectures x86 (les processeurs des PC). N'hésitez pas à compléter si vous trouvez des ressources pour d'autres architectures.

Prérequis

  • Connaître l'hexadécimal, ce qu'est un bit, un octet....
  • Connaître le langage assembleur x86.
  • Vous documenter sur certaines notions telles que la différence entre mode réel et mode protégé.
  • Connaître le langage C. Hé oui, de toute évidence, c'est le langage de "haut niveau" le plus utilisé dans la programmation noyau.
  • Lire ceci si vous ne l'avez pas déjà fait en lisant l'introduction.

Ressources en français

Ouf, il existe des articles en français qui expliquent les bases de la programmation noyau, et en plus ils sont bien faits !

PoorOS

PoorOS est disponible à cette adresse C'est un petit Os nommé avec affection "Os pourri" par son auteur. Derrière ce vilain sobriquet se cache un petit paquet pédagogique qui regroupe quatre programmes légers dans le but d'aborder les notions par étapes:
  • Boot_0
    • Qu'est ce qui se passe sommairement au démarrage d'un PC....
    • Aborde la notion du "chargeur" de noyau ou "loader". Ce sont les premières portions de code qui seront chargées depuis un lecteur (ici lecteur de disquette) par le bios.
    • Apprendre comment fonctionne la mémoire en mode réel, explication des segments et offsets de mémoires etc...
    • Notions vagues des services du Bios
  • Boot_1
    • Comment charger une plus grande portion de code depuis ce "loader".
  • Boot_2
    • Apprendre à jouer entre le mode réel et le mode protégé.
  • PoorOS
    • Utilisation du C++
    • Plein de choses croustillantes que je n'ai pas encore regardées :-)


Ce sommaire n'est qu'un pauvre résumé du fichier README situé dans l'archive de PoorOS. C'est dans ce fichier que toutes les étapes sont détaillées. Bien sûr le code source est également commenté (en anglais).
Boot_0, 1 et 2 sont programmés exclusivement en assembleur x86.

Un avantage de PoorOS est qu'il reste un programme très léger et donc lisible. Attention, il ne fonctionne qu'à partir d'une disquette.

Pépin (ex BosoKernel)

Un excellent cours avec codes sources fournis en exemple.
Un peu comme PoorOS, les bases semblent bien détaillées.
A visiter.

SimpleOs

Encore un petit noyau pour apprendre. Le code semble bien détaillé et chaque partie du code est dévoilée étape par étape.
C'est par là.

Autres liens

Un cours sur les systèmes d'exploitation

Ressources en anglais

Et en anglais, on trouve bien sûr plus de choses, et plus de détails.

Liens/documentations divers



A noter que j'ai piqué les 2 derniers liens dans la rubrique "liens" de la section "assembleur" du site Developpez.com. Merci à eux, ces 2 adresses sont très intéressantes.

Minix

Minix a d'abord été créé dans un but éducatif. Son code source est donc plus réduit, et donc plus lisible.
Il peut être utile d'y jeter un coup d'oeil une fois que vous avez des bases sur le sujet.
A noter que c'est noyau d'architecture micro-noyau

Linux

Linux est un noyau très mature et très complet.
On l'utilise pour des serveurs, pour des postes de travail, pour du temps réel, pour l'informatique embarquée etc...
C'est difficile de s'y retrouver dedans, donc pas terrible pour nous.
Par contre il peut être utile de regarder son code pour connaître des points précis: comment ça se passe avec d'autres processeurs etc.... Mais ne soyez pas déçus si vous ne parvenez pas à vos fins: c'est une jungle (environ 15000 fichiers de code source).

Outils indispensables

A noter que Qemu et nasm, sont aussi recommandés par l'auteur de PoorOS.

Qemu

Plus qu'indispensable, Qemu est vital pour programmer un noyau.
Pensiez-vous programmer votre noyau sur votre machine, le remettre sur disquette à chaque modification, et le tester sur une autre machine à chaque fois, voire redémarrer votre machine pour le tester car vous n'avez qu'un PC ?
Non, c'est invivable. C'est là qu'arrive Qemu, votre meilleur serviteur. C'est un émulateur open-source de processeur qui est capable d'émuler toute sorte d'architecture. Même pas besoin de faire un disquette pour tester votre noyau, il suffit d'utiliser une image de disquette.
Bref, je vous laisse voir les détails sur le site officiel et ici

Nasm

Nasm est un assembleur x86 open-source. Il est portable et ne s'embarrasse
pas d'une syntaxe affreuse.
A noter qu'il utilise la syntaxe intel.
Voir site officiel

Divers


Sources

A noter que certains des liens cités ici ont été trouvés via le forum et / ou le site de http://www.developpez.com

A voir également :

Ce document intitulé «  Systèmes d'exploitation - Programmation d'un Noyau / OS  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.