Home Index Search Links About Us
[LinuxFocus Image]
[Navegation Bar]
  Nouvelles   Archives

Les secrets du noyau

par Emiliano Ariel Lesende


Présentation

LINUX: Le système
d'exploitation de l'internet

Principales caractéristiques

Compiler le noyau

Présentation

Bienvenue dans la première partie d'une série d'articles sur les secrets du noyau. Vous avez probablement déjà jeté un coup d'oeil dans les sources du noyau par le passé. Dans ce cas vous avez noté que les 100ko de fichiers compressés du noyau initial sont devenus au fil du temps 300 fichiers totalisants plus de deux millions de lignes de source, et occupant plus de 9Mo sur le disque une fois compressés.

Cette série n'est pas destinée aux nouveaux venus mais au programmeurs ayant déjà une certaine expérience. Vous êtes néanmoins libre de la lire et l'auteur répondra de son mieux au questions que vous pourriez lui envoyer par e-mail.

On découvre tous les jours des nouveaux bugs, et des correctifs apparaissent au même rythme. Aujourd'hui il est presque impossible de comprendre le code source dans son ensemble. Il est écrit par de très nombreuses personnes qui essayent de garder un style de programmation homogène, mais il est en fait différent pour chaque personne.

LINUX: Le système d'exploitation de l'internet

Linux est un système d'exploitation gratuit et libre, disponible pour des architectures P.C. ainsi que pour d'autres plates-formes. Il est compatible avec le standard POSIX 1003.1 et il inclus un bon nombre des fonctionnalités d'Unix System V et BSD 4.3. Le coeur du noyau Linux dont parle cette série d'article a été écrit par Linus Torvalds un étudiant en informatique finlandais. La première version du noyau a vu le jour en Novembre 1991.

Principales caractéristiques

Linux réponds à tous les besoins d'un système d'exploitation basé sur UNIX:
  • Multitâche

    Linux est un vrai système multitâche. Toutes les taches sont indépendantes. Aucune ne doit "relâcher" le processeur pour qu'une autre puisse s'exécuter.

  • Multiutilisateur

    Linux n'est pas seulement un système multiutilisateur, il est capable de partager les ressources de l'ordinateur entre divers utilisateurs connectés à travers différents terminaux.

  • Exécutables chargés à la demande

    Seules les portions nécessaires d'un programme sont chargées en mémoire.

  • Mémoire virtuelle

    Si la mémoire est pleine, le noyau va alors chercher des pages de 4ko (8ko sur un ALPHA) non-employées pour les écrire sur le disque. Si une de ces pages doit être réutilisée le noyau la remets à sa place originale. Dans Les vieux systèmes UNIX et quelques plates-formes actuelles dont Microsoft Windows la mémoire est swappé sur le disque. Cela signifie que toutes les pages mémoire d'une tache sont sauvées sur le disque quand il y a un manque de RAM, c'est moins efficace.

  • Cache disque dynamique

    Les utilisateurs de MS-DOS utilisent SmartDrive, un programme qui réserve une quantité fixe de RAM pour faire du cache disque. Linux au contraire a un système de cache dynamique, la taille de mémoire pour le cache grossit quand la RAM est inutilisée, elle s'amoindrie quand le système ou les utilisateurs demandent plus de RAM.

  • Librairies partagées

    Les librairies sont des collections de routines utilisées par les programmes pour traiter les données. Il y a plus d'une tache qui utilisent la même librairie au même momment. Ces librairies étaient incluses dans chaque programme dans les anciens systèmes, et donc chargées plusieurs fois en mémoire quand des programmes étaient exécutés, ce qui occupait inutilement de la place en mémoire. Dans les systèmes modernes comme Linux, les librairies ne sont chargées qu'une fois en mémoire et partagées entre les programmes qui en ont besoin.

  • 100% compatible avec le standard POSIX 1003.1

    Le standard POSIX 1003.1 définit une interface standard de programmation pour les système d'exploitation UNIX. Cette interface est décrite comme un jeu de routine C, et elle est compatible avec tous les systèmes d'exploitation modernes. Microsoft Windows NT reconnait POSIX 1003.1. Linux 1.2 est 100% compatible avex POSIX, de plus des interfaces SYSTEM V et BSD sont implémentées.

  • Plusieurs formats d'exécutables

    Qui n'aimerait pas lancer des applications DOS,Windows ou FreeBSD sous Linux ? Des émulateurs DOS, Windows, et Windows95 sont en dévelopement. Linux est aussi capable d'exécuter les binaires d'autres plateformes UNIX sur architecture Intel compatibles avec le standard iBCS2 (intel Binary Compatibility) comme SCO par exemple.

  • Plusieurs systèmes de fichier

    Linux est compatible avec un grand nombre de systèmes de fichier. Le système le plus utilisé aujourd'hui est le "Second Extended File System" (ext2). Un autre systèmre de fichier reconnu est le "File Allocation Table" utilisé par MS-DOS, mais la FAT n'est pas utilisable dans un système UNIX pour des raisons de sécurité ou d'accés multiutilisateur à cause de sa conception.

  • Réseau

    Linux peut être intégré dans n'importe quel réseau local. Tous les services UNIX sont disponibles (NFS, telnet, rlogin, SLIP, PPP, etc..). L'intégration comme serveur ou client d'autres réseaux est aussi possible par exemple pour le partage de fichier et d'imprimante sous Macintosh, Netware et Windows.

  • SYSTEM V IPC

    Linux utilise cette technologie pour implementer les queues de message inter-process, les sémaphores, et les zones mémoire partagées.

Compiler le noyau

Structure des sources:Les sources du noyau se trouvent généralement sous le répertoire /usr/src/linux, nous mentioneront les répertoires relativement à ce point. En résultat du portage sur d'autres architectures qu'INTEL la structure des fichiers du noyau a été changée aprés la version 1.0. Le code dépendant de l'architecture se trouve sous le répertoire arch/. Le code pour les Intel 386, 486, Pentium, et Pentium Pro se trouve sous le répertoire arch/i386/. Le répertoire arch/mips/ est pour les systèmes basés sur les processeurs MIPS, arch/sparc/ est pour les SUN Sparc, arch/ppc/ pour les PowerPC/PowerMacintosh, ect... Nous nous concentrerons sur l'architecture Intel car c'est sur cette plateforme que Linux est le plus employé.

Le noyau Linux est comme un programme C ordinaire. Il y a seulement deux différences importantes. Le point de départ des programmes écrits en C est la fonction main(int argc,char **argv). Le noyau Linux utilise start_noyau(void). L'environnement du programme n'existe pas quand l' ordinateur vient de démarrer et que le noyau n'est pas encore chargé. Cela signifie que quelques petites choses doivent être faites avant que la première routine C ne soit appelée. Le code assembleur qui se charge de ça est situé sous le répertoire arch/i386/asm/.

Une routine assembleur charge le noyau à l'adresse 0x100000 (1 Mo), puis installe la routine de gestion des interuptions, la table globale de description de fichier et la table de description des interruptions qui ne seront utilisées que pendant la durée de l'initialisation. A ce momment, le processeur passe en mode protégé. Le répertoire init/ contient tout ce dont on a besoin pour initialiser le noyau. De là la routine start_kernel() initialise le noyau proprement en prenant en considération les paramètres passés au boot. La première tache est alors crée sans utilisé les appels du système (le système lui même n'est pas encore chargé). C'est la fameuse tache idle, celle qui utilise le temps processeur quand il n'est pas utilisé par une autre tache.

Les répertoires kernel/ et arch/i386/kernel/ contiennent comme le suggère leur nom les parties principales du noyau. C'est l'endroit où les principaux appel système sont implémentés. Mais il y a aussi le controlleur de temps (time handler), l'ordonnanceur (scheduler), le gestionnaire DMA, le controller d'interruption, et le controlleur de signaux.

Le code destiné à la gestion mémoire se trouve dans mm/ et arch/mm/. Cet espace est en charge de la gestion de l'allocation et de la désallocation de la mémoire ainsi que de la pagination.

Le sytème de fichier virtuel et sous le répertoire fs/. Les différents système de fichier reconnus se trouvent dans des sous répertoires. Les plus importants sont ext2 et proc. Nous les détaillerons plus tard.

Tous les système d'exploitation on besoin de pilotes matériel, dans le noyau Linux ils se trouvent sous le répertoire drivers/.

Sous ipc/ vous trouverez l'implémentation des appels SYSTEM V IPC.

Le code source qui implémente les protocoles réseaux, les sockets se trouve sous le répertoire net/.

L'implémentation de quelques routines C se trouvent dans lib/, permettant au noyau d'utiliser certaines fonctions C.

Les modules chargeable générés lors de la compilation du noyau sont dans le répertoire modules/, mais il est vide avant que la première compilation du noyau ne soit faite.

Le répertoire probablement le plus important pour les programmeurs est include/. Ici vous trouverez tous les fichiers d'entête C spécifiquement utilisé par le noyau. Les fichiers d'entête concernant la seule plateforme Intel se trouvent dans le répertoire include/asm-386/.

Compiler:Un nouveau noyau est généré en seulement 3 étapes:

  • Premièrement il faut configurer le noyau avec "make config", "make menuconfig" ou "make xconfig" (différentes interfaces pour la même étape de configuration)
  • puis les dépendance sont calculées avec "make depend"
  • enfin la compilation est réalisée avec "make"

Dans les prochains articles nous rentrerons dans les détails de ces scripts et comment les modifier pour ajouter de nouvelles configurations.

J'espère que vous avez apprécié cette article. Vous étes invité à envoyer vos commentaires, sugestions, et critiques à [email protected]


Traduit par Frédéric Renet

For more information:
  • Consult the Kernel-HOWTO.


© 1998 Emiliano Ariel Lesende
This website is mantained by Miguel A Sepulveda.