Aller au contenu

0 - Introduction

Ici nous ne ferrons pas de programmation, juste des bonnes définitions pour être préparé.

Préface (aka gate keeping)

ce tutoriels vous expliqueras comment créer les bases d'un kernel

il faut savoir que c'est très dur et long. Beaucoup de kernel sont abandonné...

il faut être déterminé et savoir coder, il faut bien connaitre le c ou c++ (le rust ne serra pas abordé dans ces tutoriels) il faut aussi comprendre l'assembleur,cependant l'architecture de l'assembleur dépend de vos envie. Et il ne serra pas énormément présent

Il ne faut pas commencer un kernel en parralèle d'apprendre un language, ce serra beaucoup plus dur.

Il ne faut pas croire que toutes vos application vont supporter windows,

Vous ne pouvez pas coder un kernel en js

Il est très très très recommandé d'utilisé linux, windows complique la vie et wsl est très lent

Il faut lire et ne pas juste faire des bêtes copier coller.

Introduction

Qu'est ce qu'un kernel (ou noyau) ?

Un noyau est l'une des plus grosse partie d'un système d'exploitation. Il permet aux application utilisateur d'accèder au compostants et périphériques. Il gère la mémoire, les fichier, les processus, les drivers, les processeur, une partie de la sécurité etc...

Un noyau est l'étape après le boot loader, ou le chargeur de boot.

Qu'est ce qu'un bootloader ?

Un bootloader est générallement ce qui permet de faire passer de la machine qui démarre à une machine prête pour faire booter/démarrer le noyau

Il est très important et très compliqué, il est recommandé de ne pas écrire son propre bootloader quand on débute, cela va vite vous décourager...

Un bootloader peut aussi charger des éléments important pour le kernel, comme des modules chargé dans le disques, l'A20 etc...

L'architecture

L'architecture c'est comment un processeur est structuré, comment il fonctionne, quel est son language assembly. Il y a plusieurs architecture et un kernel peut en supporter plusieurs en même temps :

  • x86
  • riscV
  • arm
  • powerpc
  • et bien d'autres

l'architecture est importante, ici nous prenons le x86 car c'est l'architecture la plus utilisée.

le x86 est divisé en modes :

nom anglais nom français taille de registre
real mode mode réel 16/20 bit
protected mode mode protégé 32bit
long mode mode long 64bit

nous utiliserons ici le mode long car il est le plus récent, même si il a moins de documentation que le mode protégé.

Comment ?

Comment coder un kernel ?

Il faut prendre la route que l'on veut, mais il y a des éléments important qu'il faut faire dans un ordre à peut près précis,

Vous pouvez dans certains cas faire l'ordre que vous voulez mais il faut quand même une route... car parfois on se pose la question : quoi faire après ?

Donc cette route ici est recommandé mais vous faites comme vous le souhaitez

  • démarrage
  • com // pour le debugging
  • gdt
  • idt
  • interruption // pour le debugging d'erreur
  • pit
  • gestion de mémoire physique
  • pagination
  • multitache

à partir d'ici tout deviens très subjectif vous pouvez enchainer sur le smp, le système de fichier, les tâches utilisatrices, etc...

[EN COURS D'ECRITURE]