Aller au contenu principal

Les processus

Les ordinateurs que nous utilisons ont la capacité d’exécuter plusieurs programmes en même temps :

  • Navigateur internet
  • Jeu vidéo
  • Musique
  • Discord
  • IDE

Et pourtant… ils ne possèdent qu’un seul processeur.

Comment peuvent-ils faire tourner plusieurs programmes en même temps ?


Notion de processus

Définition

Un processus est un programme en cours d’exécution.

Exemples :

  • Lancer un jeu → création d’un processus
  • Ouvrir un navigateur → création d’un processus
  • Lancer Python → création d’un processus

Quand le programme se ferme → le processus se termine.

Programme vs Processus

Un programme est :

  • un fichier
  • du code binaire
  • stocké sur le disque

Exemple :


Rôle du système d’exploitation

Le système d’exploitation (OS) :

  • lance les programmes
  • gère la mémoire
  • gère le processeur
  • gère les processus
Multi-processus

Un OS moderne est multi-processus. Avec, nous avons la possibilité de :

  • jouer
  • écouter musique
  • télécharger
  • naviger sur le web
  • ...

tout en même temps.

On appelle multitâche la capacité d’un système d’exploitation à exécuter plusieurs processus en même temps.
On distingue deux types de multitâche :

Chaque programme doit rendre la main volontairement.

Si un programme bloque, tout le système peut bloquer.

OS modernes

Windows, Linux et macOS utilisent un multitâche préemptif.


Les états d’un processus

Un processus peut être dans 3 états.

Le processus attend d’être exécuté.


L’ordonnanceur

Quand plusieurs processus veulent le processeur… Qui passe en premier ?

C’est l’ordonnanceur qui choisit.

L’ordonnanceur utilise différentes stratégies pour choisir le processus à exécuter :

  • priorité
  • temps partagé
  • file d’attente
Simultanéité

La simulatanéité de l'exécution des tâches est une illusion créée par la rapidité du processeur à changer de processus.

Quantum

Chaque processus s’exécute pendant un temps très court appelé quantum (temps alloué au processus par le processeur).

Exemple :

  • P1 → 5 ms
  • P2 → 5 ms
  • P3 → 5 ms

Gestion des processus

Création des processus

Un processus peut créer d’autres processus.

On parle de :

  • processus père
  • processus fils

Au démarrage du système d’exploitation :

  • un processus initial est créé (le processus 0)
  • tous les autres en descendent
Fork bomb

Une fork bomb est un programme qui crée des processus en boucle jusqu’à saturer le système.
Son nom est issu de la commande fork() sous linux permettant de créer des processus, et de la nature explosive de son comportement.

Exemple d'une commande sous Linux :

:(){ :|:& };:

Cette commande crée une fonction récursive qui s'appelle elle-même en arrière-plan, créant ainsi un nombre exponentiel de processus.

⚠️ Ne jamais tester sur votre ordinateur.

Les systèmes modernes limitent le nombre de processus par utilisateur, trop de processus sature la mémoire et bloque le système.


Identification des processus

Chaque processus possède 2 identifiants uniques :

  • PID (Process IDentifier) : identifiant du processus
  • PPID (Parent Process Identifier) : identifiant du processus père

Observer les processus

Observer les processus permet de comprendre ce que fait réellement l’ordinateur.

Cela permet notamment de :

  • voir quels programmes sont en cours d’exécution
  • détecter un programme bloqué
  • comprendre pourquoi l’ordinateur ralentit
  • surveiller l’utilisation du processeur et de la mémoire
  • repérer un programme suspect

Ouvrir le Gestionnaire de tâches

Ctrl + Shift + Esc


Terminer un processus

Il peut être nécessaire d’arrêter un processus lorsqu’un programme ne répond plus ou consomme trop de ressources.

Gestionnaire de tâches → clic droit → Fin de tâche


Processus zombies et orphelins

Dans certains cas particuliers, des processus peuvent rester dans un état anormal. Comprendre ces situations est important pour diagnostiquer des problèmes système.

Processus zombie

Un processus zombie est un processus terminé mais qui reste présent dans la table des processus.

Cela se produit lorsque :

  • le processus fils s'est terminé
  • mais le processus père n'a pas encore récupéré son code de fin

Le zombie ne consomme presque pas de mémoire, mais trop de zombies peuvent saturer la table des processus.

Processus orphelin

Un processus orphelin est un processus dont le père s’est terminé avant lui.

Dans ce cas, le système d’exploitation rattache automatiquement ce processus au processus système (PID 1 sous Linux).

Cela permet d’éviter qu’un processus reste sans contrôle.

Pourquoi c’est important

La présence de nombreux zombies ou orphelins peut indiquer :

  • un bug dans un programme
  • une mauvaise gestion des processus
  • une utilisation incorrecte de fork
  • un problème dans le système d’exploitation

L’interblocage

Définition

Un interblocage (deadlock) se produit lorsque deux processus attendent chacun une ressource détenue par l’autre.

Exemple :

  • P1 possède R1
  • P2 possède R2
  • P1 veut R2
  • P2 veut R1

→ blocage total

Plus aucun processus ne peut avancer.


Anecdote célèbre — Mars Pathfinder

La sonde Mars Pathfinder (1997) a subi un bug réel lié à la gestion des processus et à l’ordonnancement.

Un processus très important devait accéder à une ressource partagée, mais un processus moins prioritaire gardait cette ressource trop longtemps.

Pendant ce temps, un autre processus encore plus prioritaire attendait, ce qui provoquait un blocage du système.

Ce problème est appelé inversion de priorité :

  • un processus prioritaire attend
  • un processus moins prioritaire bloque la ressource
  • le système peut se retrouver bloqué

Le bug était suffisamment grave pour provoquer des redémarrages de la sonde sur Mars.

La NASA a pu corriger le problème à distance en modifiant l’ordonnanceur, sans avoir besoin de récupérer la sonde.

Importance d'une telle anecdote

Cet exemple montre que la gestion des processus n’est pas seulement théorique :

  • elle est critique dans les systèmes embarqués
  • elle peut provoquer des pannes réelles
  • elle doit être parfaitement maîtrisée dans les systèmes critiques