Aller au contenu principal

Systèmes d'exploitation — fondations · L2 · Section 1/12

Introduction aux systèmes d'exploitation

Progression

Points d’expérience : XPSérie de jours consécutifs : · —Progression du module : — / —compris

#Introduction aux systèmes d'exploitation

Comprendre un système d'exploitation commence par observer son double rôle: offrir des abstractions confortables aux applications tout en conservant un contrôle serré sur le matériel. Quand vous lancez un éditeur de texte, le noyau alloue un processus, réserve un espace mémoire privé, ouvre la fenêtre graphique via un pilote et veille à ce que le processeur alterne équitablement entre votre éditeur et le reste du système. Rien de tout cela n'est laissé au hasard: une suite d'algorithmes, de tables de données et de conventions se coordonnent pour maintenir l'illusion d'une machine simple.

#0. Composants d'un système informatique

Avant de parler du noyau, il faut délimiter le terrain. Un système informatique comprend trois composants: l'ordinateur proprement dit, les moyens de communication et le système d'exploitation.

L'ordinateur est une machine de von Neumann: un processeur, partie active sans capacité de stockage; une mémoire principale, partie passive de grande capacité, divisée en mémoire vive et mémoire de masse; des organes de communication entre processeur et mémoire — le goulot d'étranglement des données — et vers l'extérieur, pour les entrées et les sorties.

Les moyens de communication ne sont pas un accessoire: « un ordinateur isolé n'est pas un système informatique, à la rigueur une machine de bureautique ou un gestionnaire d'agenda ». L'appartenance à un réseau est indispensable à l'échange d'informations.

Le système d'exploitation est la partie logicielle. Trois propriétés le définissent: plusieurs systèmes d'exploitation peuvent être utilisés sur le même ordinateur; il est l'intermédiaire obligé entre l'utilisateur et le matériel; il gère l'utilisation de la totalité des ressources — temps, mémoire, fichiers, communications — et fournit un ensemble de programmes utilitaires pour ce qu'il ne réalise pas lui-même.

#0 bis. Comment on en est arrivé là

L'histoire éclaire les choix d'architecture, et elle tient en quatre étapes.

Avant 1960, l'utilisation est individuelle et interactive: l'ordinateur est réservé pour une certaine durée, l'utilisateur essaie, répare, réfléchit — et l'ordinateur passe beaucoup de temps inactif. Au début des années 1960 apparaissent les premiers systèmes d'exploitation, fondés sur le traitement par lots: plus de connexion directe, les travaux sont enchaînés en différé. L'utilisation du temps de l'ordinateur s'améliore, mais l'interactivité disparaît.

Vers la fin des années 1960, l'interactivité revient sous deux formes indissociables: l'accès multiple, où plusieurs utilisateurs sont connectés en même temps sur la même machine, et le temps partagé, où le temps du processeur est découpé en périodes très courtes réparties entre les utilisateurs. C'est ce modèle qui donne à Unix ses propriétés: multi-utilisateurs, multi-tâches, et de surcroît multi-sessions et multi-postes.

Depuis, le nombre de modèles de machines et de systèmes s'est réduit, et l'ordinateur personnel avec écran graphique est apparu. Unix reste le seul système non lié à un constructeur ni à un type de matériel.

#1. Les quatre responsabilités du noyau

  • Abstraire: transformer une carte réseau, un disque ou une horloge matérielle en objets manipulables par un programme utilisateur.
  • Arbitrer: décider qui obtient le processeur, quand accéder au disque, quelle requête réseau traiter en priorité.
  • Isoler: empêcher un programme fautif de corrompre les autres, séparer les privilèges entre utilisateur et superutilisateur, contrôler l'accès aux périphériques.
  • Pérenniser: assurer la durabilité des données en dépit des pannes et conserver un état cohérent du système.

Toute la suite du module se déploie autour de ces quatre axes: les processus relèvent de l'abstraction et de l'arbitrage, la mémoire virtuelle de l'isolation, le système de fichiers de la pérennisation.

#Ce que le cours SPUF201 précise, ressource par ressource

Le cours d'introduction d'Unix détaille chacune de ces responsabilités en distinguant deux niveaux: celui du matériel et celui de l'utilisateur. Cette grille est directement réutilisable en épreuve.

Gestion du processeur. Au niveau proche du matériel: les interruptions, événements extérieurs, et les trappes, événements internes au programme en cours; l'alternance entre mode système et mode utilisateur; le masquage de tout ce qui dépend du modèle de processeur. Au niveau proche de l'utilisateur: l'alternance entre processus indépendants, et la synchronisation par horloge ou par événements précis.

Gestion de la mémoire. L'espace est fini et les programmes sont en concurrence pour l'utiliser; le partage du temps implique le partage de la mémoire. La réponse d'Unix est la mémoire virtuelle, beaucoup plus grande que la mémoire réelle et représentée sur disques, avec des échanges entre mémoire réelle et mémoire virtuelle qui doivent rester rapides et fiables. Le mécanisme s'appuie sur la notion de page: une page en mémoire, une page sur disque.

Gestion du système de fichiers. Gestion de l'espace offert par les supports externes, création et suppression de fichiers, construction, lecture, déplacement, avec des moyens d'assez haut niveau pour masquer les caractéristiques du support physique. C'est cette couche qui fait qu'un fichier sur disque, sur clé USB ou sur un volume réseau se manipule de la même façon.

Gestion des organes périphériques. Disques, cassettes, haut-parleurs, micros, caméras, imprimantes, tablettes, écran, clavier, souris, plus la gestion d'un grand nombre de protocoles de communication de niveaux très variés, avec les exigences de sécurité et de fiabilité.

#2. Architecture du noyau

Les noyaux monolithiques (Linux, BSD) regroupent les pilotes, la gestion mémoire, l'ordonnancement et les systèmes de fichiers dans un même espace privilégié. Les micro-noyaux (Minix, QNX) délèguent davantage aux serveurs en espace utilisateur et s'appuient massivement sur la messagerie inter-processus. Les noyaux hybrides (Windows NT) composent entre les deux. Pour un étudiant de L2, l'enjeu est de comprendre que ce choix n'altère pas l'interface offerte aux programmes: les appels système restent stables, seuls les modules internes changent d'emplacement et de modèle de communication.

#3. Mode utilisateur, mode noyau, appels système

Le processeur distingue au minimum deux niveaux de privilège. En mode utilisateur, un programme ne peut pas toucher au matériel ni à la mémoire d'autrui: une tentative déclenche une faute. En mode noyau, le code a tous les droits. L'appel système est la frontière contrôlée entre les deux: le programme place ses arguments dans des registres, exécute une instruction spéciale, et le noyau effectue le travail à sa place avant de rendre la main. open, read, fork, mmap sont de tels passages. Le coût de cette transition, de l'ordre de la microseconde, explique pourquoi les bibliothèques tamponnent les entrées-sorties: mieux vaut un gros read que mille petits.

Ce découpage éclaire aussi la notion de processus bloquant: quand un programme attend une lecture disque, il passe en mode noyau, se met en sommeil, et le processeur est prêté à un autre. Le blocage d'un programme ne bloque pas la machine.

#4. La structure en couches

Le cours d'Unix propose une métaphore restée célèbre: celle du fruit. Les couches concentriques représentent les composants de plus ou moins haut niveau — la peau, la coquille, la chair, l'amande. La terminologie anglophone parle d'amande (kernel) pour le cœur; la francophone préfère noyau.

Empilées du bas vers le haut, les couches sont: le matériel (processeur, mémoire, organes de communication, avec son langage machine), le noyau, le shell, puis les scripts et applications.

Le noyau masque le matériel: on n'accède aux ressources que par des opérations primitives, qui comprennent la gestion du système de fichiers, le partage du temps du processeur, le partage de la mémoire et l'accès aux périphériques grâce aux pilotes. Ces primitives sont atteintes par des instructions d'appel au système; elles s'exécutent en mode privilégié (mode système), tandis que le reste des programmes tourne en mode utilisateur. Leur rôle est de lancer des processus, lire ou écrire sur des fichiers, obtenir de la place en mémoire, etc.

Le shell est la coquille de l'amande. C'est le programme de démarrage et l'interpréteur de commandes: il est à l'écoute de l'utilisateur, il interprète et exécute les commandes tapées, et lorsque le processus appelé se termine, le processus du shell redevient actif.

Au-dessus, scripts et applications: la plupart des programmes d'application communiquent avec le noyau sans passer par le shell. Le shell reconnaît en revanche un langage directement interprétable, le langage de script, qui permet de construire des scripts.

#5. Les quatre catégories de fichiers

Un principe gouverne Unix: toutes les informations extérieures au processus sont des fichiers. Un fichier peut être associé au clavier, à l'écran, à l'imprimante. Cette uniformité n'est pas une coquetterie: c'est elle qui permet de brancher n'importe quel composant sur n'importe quel autre, et c'est elle qui rend possible le tube du shell.

Le cours distingue quatre catégories.

  • Le fichier ordinaire est une suite d'octets sans structure particulière; il contient des données ou du programme. Les fichiers de texte sont structurés en lignes par une marque de fin, de nombre ordinal 10, ce qui impose des conversions depuis et vers MS-DOS ou Mac-OS.
  • Le répertoire est un nœud de la hiérarchie, c'est-à-dire un fichier de références à d'autres fichiers.
  • Le fichier spécial est un fichier virtuel, représentation d'un organe périphérique, auquel on accède par un programme pilote spécifique du périphérique.
  • Le lien symbolique est un fichier contenant la chaîne de caractères qui représente le nom d'un autre fichier: c'est un moyen de référence indirecte, qui permet de construire un graphe quelconque et non plus seulement une arborescence.

Le cheminement dans la hiérarchie se note par le caractère de barre oblique, et le répertoire racine s'appelle simplement la barre oblique.

#6. Les propriétés et la philosophie d'Unix

Les propriétés techniques principales d'Unix se lisent comme un cahier des charges: usage général, multi-utilisateurs, multi-tâches, interactif, temps partagé, indépendant des architectures de machines. Le cours insiste sur la dernière: Unix est le seul système non lié à un type de matériel.

La propriété philosophique fondamentale est que Unix est presque entièrement détaché des contraintes commerciales. Le cours distingue trois régimes de diffusion, qu'il ne faut pas confondre.

  • Le domaine public: aucune contrainte, l'œuvre appartient à tous — par exemple LaTeX.
  • La distribution gratuite: le logiciel peut être copié et utilisé gratuitement, mais le texte source n'est pas nécessairement fourni — par exemple X, ou, dans le monde du PC, Acrobat Reader.
  • Le logiciel libre: disponible gratuitement, y compris par copie, fourni avec son texte source complet, et tout produit dérivé doit à son tour être libre — par exemple Emacs, et tout le système GNU.

C'est la Free Software Foundation, fondée par Richard Stallman, auteur d'Emacs, qui promeut cette construction, et c'est le projet GNU qui a conduit à une reconstruction complète des composants d'Unix. Conséquence que le cours énonce comme un trait d'humour sérieux: dans le monde du logiciel libre, « la copie illégale de logiciel n'existe pas ».

#Exercices

1. De quels composants un système informatique est-il constitué? Pourquoi un ordinateur isolé n'est-il pas, à proprement parler, un système informatique?

2. Quelles sont les quatre responsabilités de ressources d'Unix, et à quels deux niveaux se situent-elles?

3. Qu'est-ce qu'une interruption? Qu'est-ce qu'une trappe? Quelle est la différence?

4. Décrire la structure en couches d'Unix et expliquer en quoi le shell est indépendant du noyau.

5. Citer les quatre catégories de fichiers d'Unix et donner, pour chacune, une propriété caractéristique.

Corrections détaillées

1. Trois composants: l'ordinateur (processeur, mémoire principale divisée en vive et masse, organes de communication internes et externes), les moyens de communication, et le système d'exploitation. Un ordinateur isolé n'échange aucune information avec un autre système: il n'est qu'une machine de bureautique ou un gestionnaire d'agenda. L'appartenance à un réseau est indispensable à la définition d'un système informatique.

2. Gestion du processeur, gestion de la mémoire, gestion du système de fichiers, gestion des organes périphériques. Chacune se décline en deux niveaux: proche du matériel (interruptions et trappes, modes système et utilisateur, pages en mémoire et pages sur disque, pilotes) et proche de l'utilisateur (alternance entre processus indépendants, mémoire virtuelle, masquage du support physique, protocoles de communication).

3. Une interruption est un événement extérieur au programme en cours — arrivée d'une donnée sur une carte réseau, signal d'horloge, frappe au clavier. Une trappe est un événement interne au programme en cours — un appel système, une division par zéro, une faute d'adressage. Les deux transfèrent le contrôle au noyau, mais l'origine diffère: l'une vient du matériel, l'autre du programme lui-même.

4. Du bas vers le haut: matériel, noyau, shell, scripts et applications. Le noyau masque le matériel et n'offre les ressources que par des opérations primitives, accessibles par appels système qui s'exécutent en mode privilégié. Le shell est indépendant du noyau: il ne fait que demander au noyau, en son nom, l'exécution des commandes. C'est cette indépendance qui permet de choisir son shell — sh, bash, zsh — sans changer de système, et c'est aussi la raison pour laquelle le seul shell garanti partout est sh.

5. Fichier ordinaire: suite d'octets sans structure, contenant données ou programme, structuré en lignes pour les fichiers de texte. Répertoire: nœud de la hiérarchie, fichier de références à d'autres fichiers — il ne contient donc pas les fichiers, seulement leurs noms. Fichier spécial: fichier virtuel représentant un organe périphérique, accessible par un pilote. Lien symbolique: fichier dont le contenu est le nom d'un autre fichier, ce qui autorise un graphe plutôt qu'une simple arborescence.

#Atelier: le stéthoscope

Installez strace puis observez les appels système déclenchés par un simple ls:

bashbash

1strace ls >/dev/null2# Observation attendue: une série de lignes execve, openat, mmap, write...

Chaque ligne révèle une interaction noyau. Relancez strace sur un programme interactif comme nano et identifiez les appels répétés qui assurent la réactivité (lecture clavier, rafraîchissement du terminal). Cette observation constitue votre premier « stéthoscope » sur le cœur du système.

Exercice de vérification: exécutez strace -c ls (le résumé comptable) et répondez: quel appel système est le plus fréquent? La réponse typique est une famille d'appels mmap ou openat/close: le chargement du programme et des bibliothèques mobilise ces appels avant même le listage du dossier. Si vous savez dire, pour un appel de votre liste, s'il est payé une fois au chargement ou à chaque touche clavier, vous avez compris la frontière utilisateur/noyau.