[Systèmes d'exploitation] Programmation d'un Noyau / OS

Dernière mise à jour le 10 novembre 2009 à 15:56 par marlalapocket
Publié par kilian

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.

I. 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.

II. 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 !

II.1 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.

II.2 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.

II.3 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à.

II.4 Autres liens


Un cours sur les systèmes d'exploitation

III. Ressources en anglais


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

III.1 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.

III.2 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

III.3 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).

IV Outils indispensables


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

IV.1 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

IV.2 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
Meilleures réponses pour « Programmation d'un Noyau / OS » dans :
Désactiver l'exécution de certains programmes au démarrage VoirDésactiver l'exécution de certains programmes au démarrage - Windows 98/Me/2000/XP/Vista Avec msconfig Avec WinPatrol Avec Startuplite Avec CCleaner Remarques Lorsque vous installez des logiciels, certains s'exécutent à chaque...
Supprimer complètement un programme VoirMalgré la désinstallation d'un programme, il se peut que des clés de registre ou des fichiers soient encore présents sur le PC. Si la méthode "classique" (clic droit/supprimer) ne fonctionne pas, il suffit d'utiliser l'éditeur du registre. Mise en...
Lancer un programme au démarrage du PC VoirLe problème Les solutions 1- Sans toucher au registre 2- En modifiant le registre Désactiver son lancement Le problème Certains programmes tels que Mozilla Firefox, Internet explorer ou encore les programmes de messagerie électronique ne...
Télécharger ProgDVB VoirLa diffusion de programme en numérique est de plus en plus en vogue depuis l'apparition de la connexion haut-débit. ProgDVB est un programme destiné à regarder des chaînes TV et à écouter des stations radio sur votre ordinateur. Il supporte le DVB-S...
Télécharger NTFS for Mac OS X VoirAccès total en lecture et en écriture vers des volumes NTFS NTFS for Mac® OS X fournit un accès total (lecture ou écriture, formatage) vers des partitions NTFS. Compatible avec toutes les versions de NTFS Toutes les versions NTFS sont prises en...
Enterprise Resource Planning (ERP) - Progiciel de Gestion Intégr VoirIntroduction aux ERP Les ERP (en anglais Enterprise Resource Planning), aussi appelés Progiciels de Gestion Intégrés (PGI), sont des applications dont le but est de coordonner l'ensemble des activités d'une entreprise (activités dites verticales...
Introduction à la programmation des CGI VoirPrésentation de l'interface CGI Un script CGI (Common Gateway Interface, traduisez interface de passerelle commune) est un programme exécuté par le serveur web (on dit généralement « côté serveur »), permettant d'envoyer au navigateur de...
Analyste programmeur (développeur) VoirDéveloppeur Le métier de développeur (également nommé analyste-programmeur) consiste à concevoir et à développer une application informatique, c'est-à-dire transcrire un besoin en une solution informatique écrite dans un langage informatique....
Collection CommentÇaMarche.net