Aller au contenu

Partie 2 : Gestion des processus et des ressources

Programme officiel (B.O.)

B.O. spécial n° 8 du 25 juillet 2019 - NSI Terminale

Contenus Capacités attendues Commentaires
Gestion des processus et des ressources par un système d'exploitation. Décrire la création d'un processus, l'ordonnancement de plusieurs processus par le système. Mettre en évidence le risque de l'interblocage (deadlock). À l'aide d'outils standard, il s'agit d'observer les processus actifs ou en attente sur une machine. Une présentation débranchée de l'interblocage peut être proposée.

1. La notion de processus

1.1 Programme vs processus

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.

Programme Processus
Fichier statique sur le disque Instance dynamique en mémoire
Existe même quand il ne s'exécute pas N'existe que pendant l'exécution
Un seul fichier Plusieurs processus du même programme possibles

Exemple

Si on ouvre trois fenêtres du navigateur Firefox, il y a un seul programme Firefox installé mais trois processus Firefox en cours d'exécution.

1.2 Création d'un processus

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.

1.3 Attributs d'un processus

Chaque processus possède :

Attribut Description
PID Identifiant unique (nombre entier)
PPID PID du processus parent (celui qui l'a créé)
État Prêt, en exécution, en attente, terminé
Priorité Niveau de priorité pour l'ordonnancement
Mémoire Espace mémoire alloué
Propriétaire Utilisateur ayant lancé le processus

1.4 Observer les processus

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
Gestionnaire des tâches (Ctrl + Maj + Échap)
tasklist          # en ligne de commande
taskkill /PID 1234  # terminer un processus
import os
print(f"PID du processus courant : {os.getpid()}")
print(f"PID du processus parent : {os.getppid()}")

2. Les états d'un processus

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)│
                    └──────────┘
État Description
Prêt Le 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

3. L'ordonnancement

3.1 Pourquoi ordonnancer ?

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.

3.2 Ordonnancement préemptif

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

3.3 Algorithmes d'ordonnancement

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.

Exemple Priorité Type
Gestion du clavier Haute Système
Navigateur Web Moyenne Utilisateur
Mise à jour en arrière-plan Basse Système

3.4 Exemple déroulé

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

Instant Processus élu P1 restant P2 restant P3 restant
0-3 P1 5 → 2 4 3
3-6 P2 2 4 → 1 3
6-9 P3 2 1 3 → 0
9-11 P1 2 → 0 1 terminé
11-12 P2 terminé 1 → 0 terminé

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


4. L'interblocage (deadlock)

4.1 Ressources partagées

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.

4.2 Situation d'interblocage

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.3 Analogie de la circulation

Analogie du carrefour

Quatre voitures arrivent en même temps à un carrefour sans feu ni priorité. Chacune attend que celle de droite passe d'abord. Personne ne bouge → interblocage.

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.

4.5 Prévention de l'interblocage

Stratégie Principe
Ordre d'acquisition Imposer un ordre fixe d'acquisition des ressources (tous les processus demandent A avant B)
Tout ou rien Un processus demande toutes ses ressources d'un coup ; s'il n'obtient pas tout, il attend sans rien détenir
Détection et résolution Le SE surveille les cycles d'attente et, s'il en détecte un, force un processus à libérer ses ressources
Temporisation Si un processus attend trop longtemps, il libère ses ressources et recommence

5. Processus en Python

5.1 Créer un processus fils

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})")

5.2 Utiliser le module multiprocessing

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

À retenir

Concept Description
Processus Instance en cours d'exécution d'un programme, identifiée par un PID
États Prêt → Élu → Bloqué → Terminé
Ordonnanceur Composant du SE qui décide quel processus s'exécute
Tourniquet Algorithme d'ordonnancement avec quantum de temps fixe
Interblocage Blocage mutuel de processus attendant chacun une ressource détenue par l'autre
Conditions de Coffman Exclusion mutuelle, détention et attente, non-préemption, attente circulaire