| PrésentationBienvenue   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éristiquesLinux  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 noyauStructure   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 à elesende@nextwork.net
 |