2. Présentation du noyau LINUX

2.1. Introduction

Linux s'intègre dans la longue histoire des systèmes UNIX. Le développement de ce système d'exploitation a débuté en 1969 sous l'impulsion de Ken Thompson et Dennis Ritchie qui travaillaient alors pour la société Bell Laboratories. Plusieurs versions furent développées en interne et c'est en 1975 qu'apparut la version 6 qui deviendra la base des Unix commerciaux.

Par la suite, de nombreuses implémentations d'UNIX furent développées. L'université de Berkeley fut à la base de la version BSD, Hewlett Packard proposa la version HP-UX, etc... Malgré de bonnes intentions au départ, il existait des incompatibilités entre tous ces Unix, si bien que le portage d'une application d'un UNIX vers un autre était difficile. Pour réduire ces disparités, la société AT&T proposa un standard UNIX en 1983, connu sous le nom de System V. En 1986, l'Institute of Electrical and Electronics Engineers (IEEE) proposa un autre standard connu sous le terme de POSIX. POSIX est une standardisation permettant d'assurer la portabilité des applications d'un UNIX à un autre.

Le système d'exploitation GNU/Linux se comporte comme un UNIX et implémente les spécifications POSIX, avec des extensions système V et BSD.

Issu du travail d'un étudiant finlandais, Linus Torvalds, Linux se distingue par le fait qu'il est distribué sous les conditions d'une licence particulière, appelée GPL (GNU Public License). Cette licence précise que toute personne peut modifier, améliorer ou corriger le code source, mais que ces modifications devront également être distribuées librement.

Les principales caractéristiques de Linux sont les suivantes :

  • Multitâches : exécute plusieurs programmes en même temps.

  • Multi-utilisateurs : plusieurs utilisateurs peuvent être actifs en même temps.

  • Multi plates-formes : Linux peut fonctionner avec différents types de processeurs (Intel, Sparc, Alpha, PowerPC, etc...).

  • Supporte un grand nombre de systèmes de fichiers : Ext(2|3|4), XFS, FAT, VFAT, NFS, CIFS, etc.

  • Dispose d'un catalogue de fonctions réseau conséquent. Voir Section 3, « Sous-système réseau du noyau LINUX ».

L'évolution du noyau est très rapide et celui qui est utilisé pour ce programme de formation appartient à la série 2.6.

2.2. Architecture du système GNU/Linux

Comme dans tout système d'exploitation, le noyau LINUX est une interface entre des programmes et des périphériques physiques. L'accès à ces périphériques se fait par l'intermédiaire d'appels systèmes qui sont identiques quelle que soit la machine. Cette encapsulation du matériel libère les développeurs de logiciels de la gestion complexe des périphériques : c'est le système d'exploitation qui s'en charge. Ainsi, si le système d'exploitation existe sur plusieurs architectures, l'interface d'utilisation et de programmation sera la même sur toutes. On dira alors que le système d'exploitation offre une machine virtuelle à l'utilisateur et aux programmes qu'il exécute.

Architecture du système GNU/Linux

GNU/Linux est considéré comme un système d'exploitation monolithique, écrit comme un ensemble de procédures qui peuvent s'appeler mutuellement. Pour l'utilisateur, il se présente comme un seul gros fichier. Cependant, il contient un ensemble de composants réalisant chacun une tâche bien précise. Cette construction monolithique induit un aspect important : la notion d'espace noyau (kernelspace) et d'espace utilisateur (userspace). Dans l'espace noyau, aucune restriction n'est imposée. Dans l'espace utilisateur, un certain nombre de restrictions sont imposées (par exemple, la création d'un fichier ne peut se réaliser que si les droits sont suffisants), et le processus ne peut avoir accès qu'aux zones mémoires qui lui ont été allouées.

Le noyau LINUX est composé de cinq sous-systèmes principaux. Un sous-système peut être défini comme une entité logicielle qui fournit une fonctionnalité particulière.

Tâches réalisées par le noyau LINUX

Gestion des processus, Ordonnanceur, Scheduler

Ce sous-système est chargé de répartir équitablement les accès au processeur entre toutes les applications actives. Cela n'inclut pas seulement les processus utilisateurs, mais aussi les sous-systèmes du noyau lui-même. Cette fonction est réalisée par le Scheduler.

Gestion de la mémoire

Ce sous-système est chargé d'affecter à chaque programme une zone mémoire. Il a également un rôle de protection : la mémoire pour un processus est privée et celle-ci ne doit pas être lue ni modifiée par un autre.

Système de fichier virtuel

Le sous-système de fichiers garantit une gestion correcte des fichiers et un contrôle des droits d'accès. Pour limiter la complexité liée aux nombreux systèmes de fichiers existants, LINUX adopte le concept de Virtual FileSystem (VFS). Le principe du VFS est de proposer des appels systèmes identiques quel que soit le système de fichiers. Il est de la responsabilité du noyau de détourner les appels standards vers les appels spécifiques au système de fichiers.

Service réseau

Le sous-système réseau permet à Linux de se connecter à d'autres systèmes à travers un réseau informatique. Il y a de nombreux périphériques matériels qui sont supportés et plusieurs protocoles réseaux peuvent être utilisés.

Communications Inter Processus

Dans la mesure où un processus ne peut avoir accès qu'à la zone mémoire qui lui a été allouée, LINUX propose plusieurs mécanismes permettant à des applications de communiquer entre elles.

Les relations entre les différentes parties du noyau sont montrées sur la figure ci-dessous.

Structure générale du noyau GNU/Linux