Aller au contenu

Chapitre 7 - Partie 3 : Gestion des processus et des ressources


Un programme est un fichier stocké sur le disque (par exemple python.exe ou firefox.exe). Un processus est une instance en cours d'exécution de ce programme.

ProgrammeProcessus
Fichier statique sur le disqueInstance dynamique en mémoire
Existe même quand il ne s'exécute pasN'existe que pendant l'exécution
Un seul fichierPlusieurs processus du même programme possibles

La création d'un processus suit plusieurs étapes :

  1. Le système d'exploitation (SE) alloue de la mémoire pour le processus ;
  2. Le SE charge le code du programme en mémoire ;
  3. Le SE attribue un identifiant unique appelé PID (Process IDentifier) ;
  4. Le SE initialise le contexte du processus (registres, compteur ordinal, pile) ;
  5. Le processus est placé dans la file d'attente de l'ordonnanceur.

Chaque processus possède :

AttributDescription
PIDIdentifiant unique (nombre entier)
PPIDPID du processus parent (celui qui l'a créé)
ÉtatPrêt, en exécution, en attente, terminé
PrioritéNiveau de priorité pour l'ordonnancement
MémoireEspace mémoire alloué
PropriétaireUtilisateur ayant lancé le processus
Fenêtre de terminal
ps aux # liste tous les processus
top # vue en temps réel
htop # vue améliorée (si installé)
kill 1234 # terminer le processus de PID 1234

Un processus passe par différents états au cours de sa vie :

┌──────────┐
Création ──► │ Prêt │ ◄──── Fin d'attente E/S
└────┬─────┘
│ Élu par l'ordonnanceur
▼
┌──────────┐
│ Élu │ ──── Terminaison ──► Fin
│(exécution)│
└────┬─────┘
│ Demande d'E/S
│ ou préemption
▼
┌──────────┐
│ Bloqué │
│(en attente)│
└──────────┘
ÉtatDescription
PrêtLe processus attend d'être sélectionné par l'ordonnanceur
Élu (en exécution)Le processus utilise actuellement le processeur
Bloqué (en attente)Le processus attend un événement (lecture disque, saisie clavier, réseau)
TerminéLe processus a fini son exécution

Un processeur ne peut exécuter qu'un seul processus à la fois (par cœur). Or, un système moderne peut avoir des dizaines, voire des centaines de processus actifs. L'ordonnanceur (scheduler) du SE décide quel processus obtient le processeur, et pour combien de temps.

Dans un système préemptif, l'ordonnanceur peut interrompre un processus en cours d'exécution pour en exécuter un autre. C'est le mode utilisé par tous les SE modernes.

Le processeur alterne très rapidement entre les processus, donnant l'illusion d'une exécution simultanée. On parle de pseudo-parallélisme ou de temps partagé.

Tourniquet (Round Robin) :

Chaque processus reçoit un quantum de temps (par exemple 20 ms). À la fin de son quantum, il est interrompu et placé en fin de file.

File d'attente : [P1] [P2] [P3]
Temps 0-20 ms : P1 s'exécute
Temps 20-40 ms : P2 s'exécute
Temps 40-60 ms : P3 s'exécute
Temps 60-80 ms : P1 s'exécute (retour en tête)
...

Avec priorités :

Chaque processus a un niveau de priorité. L'ordonnanceur choisit toujours le processus de plus haute priorité parmi ceux prêts. Les processus de même priorité sont gérés en tourniquet.

ExemplePrioritéType
Gestion du clavierHauteSystème
Navigateur WebMoyenneUtilisateur
Mise à jour en arrière-planBasseSystème

Trois processus P1, P2, P3 avec un quantum de 3 unités de temps :

InstantProcessus éluP1 restantP2 restantP3 restant
0-3P15 → 243
3-6P224 → 13
6-9P3213 → 0
9-11P12 → 01terminé
11-12P2terminé1 → 0terminé

Durée totale : 12 unités de temps. Tous les processus ont pu progresser.


Les processus ont parfois besoin d'accéder à des ressources partagées : fichier, imprimante, zone mémoire, connexion réseau, etc. Quand une ressource est utilisée par un processus, les autres doivent attendre.

Un interblocage survient quand deux (ou plus) processus s'attendent mutuellement, chacun détenant une ressource dont l'autre a besoin. Aucun ne peut progresser.

┌──────────┐ ┌──────────┐
│ P1 │ │ P2 │
│ │ possède │ │
│ détient ├──────────► Ressource A │ détient ├──────────► Ressource B
│ │ │ │
│ demande │ │ demande │
│ ├──────────► Ressource B │ ├──────────► Ressource A
│ │ attend │ │ attend
└──────────┘ └──────────┘
  • P1 détient la ressource A et demande la ressource B ;
  • P2 détient la ressource B et demande la ressource A ;
  • Chacun attend que l'autre libère sa ressource → blocage définitif.

4.4 Conditions nécessaires (conditions de Coffman)

Section intitulée « 4.4 Conditions nécessaires (conditions de Coffman) »

L'interblocage ne se produit que si toutes ces conditions sont réunies simultanément :

  1. Exclusion mutuelle : une ressource ne peut être utilisée que par un seul processus à la fois ;
  2. Détention et attente : un processus détient au moins une ressource et en attend une autre ;
  3. Non-préemption : une ressource ne peut pas être retirée de force à un processus ;
  4. Attente circulaire : il existe un cycle d'attente entre les processus.
StratégiePrincipe
Ordre d'acquisitionImposer un ordre fixe d'acquisition des ressources (tous les processus demandent A avant B)
Tout ou rienUn processus demande toutes ses ressources d'un coup ; s'il n'obtient pas tout, il attend sans rien détenir
Détection et résolutionLe SE surveille les cycles d'attente et, s'il en détecte un, force un processus à libérer ses ressources
TemporisationSi un processus attend trop longtemps, il libère ses ressources et recommence

import os
pid = os.fork() # Unix uniquement
if pid == 0:
print(f"Processus fils (PID = {os.getpid()})")
else:
print(f"Processus père (PID = {os.getpid()}, fils = {pid})")
from multiprocessing import Process
import os
def tache(nom):
print(f"Processus {nom} (PID = {os.getpid()})")
p1 = Process(target=tache, args=("A",))
p2 = Process(target=tache, args=("B",))
p1.start()
p2.start()
p1.join()
p2.join()
print("Les deux processus sont terminés.")

ConceptDescription
ProcessusInstance en cours d'exécution d'un programme, identifiée par un PID
ÉtatsPrêt → Élu → Bloqué → Terminé
OrdonnanceurComposant du SE qui décide quel processus s'exécute
TourniquetAlgorithme d'ordonnancement avec quantum de temps fixe
InterblocageBlocage mutuel de processus attendant chacun une ressource détenue par l'autre
Conditions de CoffmanExclusion mutuelle, détention et attente, non-préemption, attente circulaire