Le noyau (kernel) fait vraiment beaucoup de choses. Je pense qu'une bonne manière de résumer tout cela est de dire qu'il fait faire au hardware ce que les programmes veulent, proprement et efficacement.
Le processeur ne peut exécuter qu'une seule instruction à la fois, mais Linux semble faire tourner beaucoup de choses simultanément. Le noyau accomplit cela en sautant de tâche en tâche très rapidement. Il fait le meilleur usage possible du processeur en gardant trace des processus qui sont prêts à être exécutés et de ceux qui attendent quelque chose comme un enregistrement en provenance d'un disque, ou une saisie clavier quelquonque. Cette tâche du noyau est appelée "scheduling" (planification).
Si un programme ne fait rien, alors il n'a pas besoin d'être en RAM. Même un programme qui fait quelque chose peut avoir certaines parties inactives, qui donc n'ont pas besoin d'être en RAM. L'espace adressable est divisé en pages. Le noyau garde une trace des pages les plus utilisées. Les pages qui ne sont pas autant utilisées peuvent être déplacées dans la partition d'échange (swap). Lorsqu'une page est à nouveau sollicitée, une autre page inutilisée est retirée de l'espace adressable pour lui faire de la place. Cela s'appelle la gestion de la mémoire virtuelle.
Si vous avez un jour compilé votre propre noyau, vous avez remarqué qu'il y a un grand nombre d'options pour des périphériques spécifiques. Le noyau contient beaucoup de code spécifique pour converser avec l'électronique de tout type, et les présente d'une façon propre et uniforme aux programmes applicatifs.
Le noyau prend aussi en charge la gestion des fichiers, les communications interprocessus, et beaucoup du travail concernant le réseau.
Une fois le noyau chargé, la première chose qu'il fait est de rechercher
un programme appelé init
et l'exécuter.
La majorité de la configuration du noyau est effectuée quand vous le
construisez, en utilisant make menuconfig
, ou make xconfig
dans le répertoire /usr/src/linux/
(ou là ou se trouvent les sources
de votre noyau Linux). Vous pouvez réinitialiser le mode vidéo par défaut,
la racine du système de fichiers, le périphérique de swap et la taille du
disque virtuel (RAM disk) en utilisant rdev
. Ces paramètres ainsi
que d'autres peuvent aussi être passés au noyau depuis Lilo. Vous pouvez
indiquer à Lilo les paramètres à passer au noyau soit dans lilo.conf, soit
à l'invite (prompt) de Lilo.
Par exemple, si vous souhaitiez utiliser hda3 comme racine du système de
fichiers plutôt que hda2, vous pourriez taper :
LILO: linux root=/dev/hda3
Si vous mettez en place un système à partir de ses sources, vous pouvez vous simplifier la vie en créant un noyau "monolithique", c'est-à-dire sans module. Vous n'aurez donc pas à copier ceux-ci sur le système cible.
NOTE : Le fichier System.map
est utilisé par le logger (le journal
système, qui enregistre les messages de service) du noyau pour déterminer
les noms des modules générant des messages. Le programme top
utilise également ces informations. Lorsque vous copiez le noyau
vers un système cible, copiez aussi System.map
.
Réfléchissez à ceci : /dev/hda3
est un type de fichier spécial
qui décrit une partition d'un disque dur. Mais il vit sur le système de fichiers
comme tous les autres fichiers. Le noyau veut savoir quelle partition
monter à la racine - donc il n'a pas encore de système de fichiers.
Alors comme peut-il lire /dev/hda3
pour trouver la partition à
monter ?
Si vous ne l'avez pas encore fait, compilez votre noyau. Lisez l'aide (Help) pour chaque option.
Essayez de voir jusqu'à quel point vous pouvez réduire la taille de votre noyau avant qu'il ne cesse de fonctionner. Vous pouvez apprendre beaucoup en écartant les parties qui ne sont pas nécessaires.
Lisez ``The Linux Kernel'' (URL plus bas) et ce faisant, trouvez les parties du source auxquelles il se réfère. Le livre (au moment où j'écris ces lignes) se réfère au noyau version 2.0.33, qui devient franchement dépassé. Il pourrait être plus facile de suivre si vous téléchargiez cette ancienne version et y lisiez le source. Il est très excitant de trouver des morceaux de code C appelés ``process'' et ``page''.
Programmez ! Faites des essais ! Voyez si vous pouvez faire cracher au noyau des messages supplémentaires ou quelque chose du même genre.
/usr/src/linux/README
et le contenu de
/usr/src/linux/Documentation/
(Ces emplacements peuvent varier sur votre système)make menuconfig
ou make xconfig