next up previous contents
Next: 5.2 Structure interne Up: 5. Le kernel.2 Previous: 5. Le kernel.2

5.1 Présentation [YB]

Le kernel est le c\oeur du système - en fait, le système lui-même, et dans le cas de Linux, sans doute l'un des éléments les plus remarquables qui soient.

Linux est l'un des très rares systèmes d'exploitation à fournir librement le code source de son kernel - c'est-à-dire à permettre à qui le souhaite, de regarder comment le système est programmé au plus profond. Le code source du kernel de Linux représente à ce jour plus de 1 500 000 lignes de code en langage C (le langage de programmation le plus utilisé actuellement), plus quelques centaines de lignes en langage assembleur (le langage de plus bas niveau qui soit, en prise directe avec l'électronique de l'ordinateur). Cet aspect à lui seul force l'admiration : ces lignes, réparties dans plusieurs centaines de fichiers, ont été écrites par des milliers de programmeurs de toutes nationalités à travers le monde, communiquant par l'Internet, le tout organisé de main de maître (certains parlent de <<dictature éclairée>>) par Linus Torvald, le créateur initiale de Linux.

Ce mode de développement, cette ouverture du kernel, est l'une des plus grandes forces de Linux. Comme chacun peut observer le code source, chacun peut apporter sa pierre à l'édifice, proposer de nouvelles fonctionnalités, corriger des erreurs connues, améliorer des parties existantes... La collaboration de ces milliers de programmeurs, travaillant tous pour la beauté du code et la gloire (au sens propre comme au sens figuré), confère au développement de Linux une dynamique, une puissance et une qualité sans égale - inégalée et inégalable.

Mais en fait, qu'est-ce réellement que ce kernel ? Que fait-il ? Où est-il ?

Répondre à la première question n'est pas si évident que cela. En gros, le kernel est un programme chargé en mémoire dans les premières microsecondes du démarrage de Linux. Son rôle est alors de reconnaître le matériel électronique présent (les cartes diverses, le processeur, etc.), d'en prendre le contrôle, puis de lancer l'initialisation du système lui-même. Lorsque vous démarrez Linux, les premiers messages obscurs qui défilent à l'écran proviennent du kernel. Après cette première phase, le kernel rentre dans l'ombre, et se <<contente>> d'assurer la communication entre les matériels (clavier, carte vidéo, mémoire, etc.) et les programmes qui s'exécutent. C'est également lui qui permet à plusieurs programmes de s'exécuter simultanément, sans qu'ils empiètent les uns sur les autres. C'est encore lui, lorsque vous arrêtez votre système Linux, qui va s'assurer que l'arrêt se fait dans de bonnes conditions, que tout ce qui doit être inscrit sur disque l'a bien été. Comme vous le voyez, le kernel est véritablement le c\oeur du système (ou son cerveau, si l'on veut), élément vitale et indispensable, qui ne fait jamais parler de lui sauf lors de la phase initiale du démarrage et la phase finale de l'arrêt.

La figure 5.1 est une schématisation de ce principe de fonctionnement, connu sous le terme de <<modèle à trois couches>>. Ce modèle est respecté par pratiquement tous les systèmes informatiques actuels. Celui présenté ici est particulièrement simple : chacune des couches peut se décomposer en d'autres, mais ce n'est pas l'objet de cet ouvrage.


  
Figure 5.1: Le modèle à trois couches des systèmes informatiques

\includegraphics{images/3couches.eps}


Ce modèle présente un intérêt incontestable. Le kernel offre aux programmes des fonctions normalisées d'accès au matériel, ainsi les programmes n'ont pas a se soucier du matériel sur lequel ils fonctionnent. Les matériels étant très divers, cela simplifie considérablement l'écriture des programmes, qui se contentent de communiquer avec le kernel qui leur présente toujours le même visage. A sa charge de s'adapter à la diversité du matériel, pour <<relayer>> les demandes des programmes. C'est là une des fonctions essentielles du kernel, parmis d'autres.

Physiquement, le kernel se présente sous la forme d'un fichier dont la taille tourne en général autour de 500Ko, souvent situé dans le répertoire /boot ou à la racine, et dont le nom commence par vmlinuz. Il s'agit d'un fichier binaire, comportant du code machine compréhensible seulement par votre processeur : seuls quelques rares et étranges êtres humains sont capables de lire directement un tel fichier... Il s'agit là de ce qui s'exécute sur votre machine lorsque vous l'utilisez.

Mais Linux est OpenSource : le code source du kernel, en langage C, vous est donc librement accessible. Normalement, il est dans une arborescence dans le répertoire /usr/src/linux. Notez qu'en fait, ce chemin n'est qu'un lien symbolique vers un répertoire au nom plus complet, comportant le numéro du kernel, par exemple, /usr/src/linux-2.0.36.

En effet, le kernel est numéroté pour distinguer les différentes versions, selon un principe précis. Le premier chiffre (le '2' dans notre exemple) est appelé le numéro majeur de version. Celui-ci n'évolu que dans le cas d'une modification profonde dans la structure du kernel, qui se traduit par une modification radicale du fonctionnement du système (du moins de façon interne, les changements pour l'utilisateur ne sont pas toujours aussi flagrants). D'une manière générale (à quelques exceptions près), les programmes qui sont prévus pour un kernel de majeur 2 fonctionneront sur presque tous les <<kernels 2>>, mais les programmes prévus pour un <<kernel 1>> ont peut de chance de tourner.

Le deuxième chiffre (le '0' dans notre exemple) est le numéro mineur de version. Il indique une évolution dans le kernel, plutôt qu'une révolution, en général l'ajout de fonctionnalités. De plus, si ce numéro est un chiffre pair, il signale que le kernel est considéré comme stable, en opposition avec les kernels de développement, réservés à ceux qui développent le kernel, qui comportent un mineur impair. Par exemple, un kernel de numéro 2.1.x est un kernel en cours de développement, donc par essence plein de nouveautés, et d'erreurs...

Enfin, le troisième chiffre est un numéro de révision : il correspond à diverses corrections ou améliorations apportées au kernel, mais normalement pas à l'ajout de nouvelles fonctionnalités.


next up previous contents
Next: 5.2 Structure interne Up: 5. Le kernel.2 Previous: 5. Le kernel.2
kafka.fr@linux-france.org