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.
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.
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.