5-02. Gestion des processus
Rôles et fonctions d’un OS
Ceci est un rappel de ce que vous avez vu en première… 😏
Un système d’exploitation (OS, pour Operating System) est un ensemble de programmes qui réalise l’interface entre le matériel (hardware) et les applications (software) des utilisateurs.
Le système d'exploitation se présente à l'utilisateur via son interface (graphique ou en ligne de commande) et interagit avec le matériel via son noyau (kernel). Entre ces deux extrémités se trouvent plusieurs couches logicielles qui abstraient les complexités techniques.
Un système d'exploitation remplit deux fonctions essentielles :
- Servir d'intermédiaire entre le matériel informatique et les logiciels : il crée une couche d'abstraction qui permet aux applications d'accéder aux ressources matérielles sans avoir à gérer leur complexité technique.
- Gérer efficacement les ressources de l'ordinateur : il organise le partage du processeur, de la mémoire centrale et des périphériques d'entrées-sorties entre les différents programmes qui s'exécutent simultanément.
Processus : création et ordonnancement
- Décrire la création d’un processus, l’ordonnancement de plusieurs processus par le système.
Un processus est la représentation pour le système d'exploitation d'un programme en cours d'exécution ;
L'ordonnancement est la gestion de l'allocation du processeur par le système d'exploitation, c'est-à-dire le partage du processeur entre les différents processus.
Les processus
Un programme est vu différemment selon la perspective :
- Sous forme statique : un programme est un fichier exécutable stocké en mémoire auxiliaire contenant des instructions et données ;
- Sous forme dynamique : un processus est l'instance d'un programme en cours d'exécution, qui utilise activement des ressources système.
Ressources
Une ressource est tout ce dont un processus a besoin pour s'exécuter : ressources matérielles (processeur, périphériques) ou logicielles (fichiers, variables).
Pour obtenir une ressource, un processus entre en concurrence avec d'autres demandes issues d'autres processus.
Bloc de contrôle de processus (PCB)
Au sein du système d'exploitation, le processus est représenté par une structure de données appelée bloc de contrôle de processus (PCB). Cette structure contient notamment :
- un identificateur unique du processus (PID) ;
- l'état courant du processus (prêt, élu, bloqué) ;
- des informations sur l'exécution et les ressources utilisées ;
- des données relatives à l'ordonnancement.
Le PCB permet au système d'exploitation de gérer et de suivre l'état de chaque processus.
Liste des processus en cours
Dans la console PowerShell de Windows, tapez la commande suivante :
Get-Process | Format-Table -Property Id, ProcessName, CPU, WorkingSet -AutoSize
Cette commande affiche l'ID des processus, son nom, l’utilisation CPU et la mémoire utilisée.
Pour avoir une idée des ressources mémoire utilisées :
Get-Process | Format-Table Id, ProcessName, CPU, WorkingSet, PagedMemorySize, PrivateMemorySize, VirtualMemorySize -AutoSize
WorkingSet: mémoire physique utiliséePagedMemorySize: mémoire paginéePrivateMemorySize: mémoire privée (non partagée)VirtualMemorySize: espace d'adressage virtuel
Pour avoir des informations sur l'exécution :
Get-Process | Format-Table Id, ProcessName, StartTime, TotalProcessorTime, UserProcessorTime, PrivilegedProcessorTime -AutoSize
StartTime: heure de démarrage du processusTotalProcessorTime: temps total d'utilisation CPUUserProcessorTime: temps passé en mode utilisateurPrivilegedProcessorTime: temps passé en mode privilégié (noyau)
Correction
État d’un processus
Un processus est dit :
- prêt lorsqu’il est en attente du processeur ;
- élu lorsqu’il a obtenu le processeur et qu’il s’exécute ;
- bloqué lorsqu’il attend une ressource autre que le processeur.
Lorsqu’un processus bloqué a obtenu la ressource qu’il attendait, il repasse dans l’état prêt car le processeur n’est pas forcément libre.
Exemple. Imaginons un système d'exploitation qui gère trois processus simples :
- P1 : un traitement de texte
- P2 : un navigateur web
- P3 : une application de calcul
Voici comment ces processus pourraient évoluer dans le temps :
| Temps | P1 | P2 | P3 |
|---|---|---|---|
| t0 | Élu | Prêt | Prêt |
| t1 | Élu | Prêt | Prêt |
| t2 | Bloqué (attend saisie) | Élu | Prêt |
| t3 | Bloqué (attend saisie) | Élu | Prêt |
| t4 | Bloqué (attend saisie) | Bloqué (charge page) | Élu |
| t5 | Prêt (saisie reçue) | Bloqué (charge page) | Élu |
| t6 | Prêt | Prêt (page chargée) | Élu |
| t7 | Élu | Prêt | Prêt |
| t8 | Élu | Prêt | Prêt |
Explications
1. Au temps t0-t1 :
- P1 (traitement de texte) est élu et s'exécute sur le processeur
- P2 et P3 sont prêts, en attente du processeur
2. Au temps t2-t3 :
- P1 devient bloqué car il attend une saisie utilisateur
- P2 (navigateur) devient élu et commence à s'exécuter
- P3 reste prêt
3. Au temps t4 :
- P1 est toujours bloqué en attente de saisie
- P2 devient bloqué car il attend le chargement d'une page web
- P3 (application de calcul) devient élu et commence ses calculs
4. Au temps t5 :
- P1 reçoit la saisie attendue et passe à l'état prêt (pas encore élu car P3 utilise le processeur)
- P2 est toujours bloqué en attente du chargement
- P3 continue d'être élu
5. Au temps t6 :
- P1 reste prêt
- P2 a terminé son chargement et devient prêt
- P3 est toujours élu
6. Au temps t7-t8 :
- L'ordonnanceur décide de redonner le processeur à P1 qui devient élu
- P2 et P3 passent à l'état prêt
Ordonnancement
L’ordonnancement, c’est la fonction du système d’exploitation qui permet de choisir à un instant donné quel processus va s’exécuter. L’opération qui consiste à choisir ce processus est appelée opération d’élection.
L’ordonnancement peut être réalisé de différentes manières : par ordre de soumission, par tourniquet, par priorité (préemptive ou non), etc. Une priorité est un nombre entier positif qui donne un rang à chaque processus.
Deux grandeurs peuvent être calculées sur les processus :
- le temps d’attente : temps écoulé entre la date de soumission et la date de début d’exécution.
- le temps de réponse : temps écoulé entre la date de soumission et la date de fin d’exécution.
Imaginons trois processus dont les caracteristiques sont les suivantes :
| Processus | Date de soumission | Temps d’exécution | Priorité |
|---|---|---|---|
| P1 | 0 | 16 | 2 |
| P2 | 2 | 4 | 3 |
| P3 | 10 | 6 | 1 |
Voici comment seront traités les processus en fonction du type d’ordonnancement utilisé
1. Par ordre de soumission
Principe : les processus sont élus selon l’ordre dans lequel ils arrivent dans la file d’attente des processus prêts. Le processus élu s’exécute, soit jusqu’à ce qu’il soit terminé, soit jusqu’à ce qu’il se bloque de lui-même.
| Processus | Temps d’attente | Temps de réponse |
|---|---|---|
| P1 | 0 | 16 |
| P2 | 16-2=14 | 20-2=18 |
| P3 | 20-10=10 | 26-10=16 |
2. Par tourniquet
Principe : les processus sont élus selon l’ordre dans lequel ils arrivent dans la file d’attente des processus prêts. Le processus élu s’exécute, soit jusqu’à ce qu’il soit terminé, soit jusqu’à ce qu’il se bloque de lui-même, soit jusqu’à ce qu’il se bloque après un temps donné, appelé quantum (il retourne alors à l’état prêt).
| Processus | Temps d’attente | Temps de réponse |
|---|---|---|
| P1 | 0 | 26 |
| P2 | 0 | 6 |
| P3 | 0 | 10 |
3. Par priorité non préemptive
Principe : Les processus sont élus par priorité. Le processus élu s’exécute, soit jusqu’à ce qu’il soit terminé, soit jusqu’à ce qu’il se bloque de lui-même.
Le processus P1 s’est déroulé jusqu’à la fin, car la priorité n’est pas préemptive : elle n’interrompt pas un processus en cours. Après l’exécution du processus P1, deux processus sont dans l’état « prêt ». Le processus P3, bien qu’ayant été soumis après P2, a une priorité plus élevée. C’est donc lui qui est traité en premier.
3. Par priorité préemptive
Principe : les processus sont élus par priorité. Le processus élu s’exécute, soit jusqu’à ce qu’il soit terminé, soit jusqu’à ce qu’il se bloque de lui-même, soit jusqu’à ce qu’il soit préempté par un processus de priorité plus élevée (il retourne alors à l’état prêt).
Le processus P1 est le premier soumis. Puis le processus P2 est soumis à la date 2. Mais celui-ci à une priorité inférieure à P1. Donc il reste dans l’état « prêt ».À la date 10, le processus P3 est soumis. Celui-ci a une priorité plus élevé que P1. Il interrompt donc P1 le temps de son exécution. Lorsqu’il est terminé, P1 repasse dans l’état « élu », car il n’est pas terminé et sa priorité est plus élevée que P2. Lorsque P1 se termine, P2 passe dans l’état « élu ».
Ordonnancement
Traiter les quatre types d’ordonnancement ci-dessous avec les processus ci-dessous. Dans le cas d’un ordonnancement de type tourniquet, vous prendrez un quantum de 3.
| Processus | Date de soumission | Temps d’exécution | Priorité |
|---|---|---|---|
| P1 | 0 | 8 | 3 |
| P2 | 4 | 7 | 1 |
| P3 | 7 | 11 | 2 |
Vous préciserez également les temps d’attente et de réponse pour chaque processus dans chaque cas.
Correction
1. Par ordre de soumission
| Processus | Temps d’attente | Temps de réponse |
|---|---|---|
| P1 | 0 | 8 |
| P2 | 4 | 11 |
| P3 | 8 | 19 |
2. Par tourniquet (quantum 3)
| Processus | Temps d’attente | Temps de réponse |
|---|---|---|
| P1 | 0 | 14 |
| P2 | 2 | 17 |
| P3 | 2 | 19 |
3. Par priorité non préemptive
| Processus | Temps d’attente | Temps de réponse |
|---|---|---|
| P1 | 0 | 8 |
| P2 | 4 | 11 |
| P3 | 8 | 19 |
4. Par priorité préemptive
| Processus | Temps d’attente | Temps de réponse |
|---|---|---|
| P1 | 0 | 26 |
| P2 | 0 | 7 |
| P3 | 0 | 11 |
Création et identification des processus
Création de processus et arbre
Un processus peut créer un ou plusieurs processus. Si un processus A crée un processus B, alors on dira que A est le père de B et que B est le fils de A. Bien sûr, à son tour, B peut créer un processus C (B sera alors le père de C et C le fils de B). Les relations père/fils entre les processus peuvent être modélisées par une structure d’arbre.
Sous Linux, un tout premier processus (appelé Swapper) est créé au moment du démarrage de l’ordinateur (il correspond donc à la racine de l’arbre). Celui-ci crée ensuite un processus fils appelé init qui, lui, va créer tous les processus nécessaires au bon fonctionnement du système. D’autres processus sont ensuite créés à partir des fils de init.
Identification des processus
Chaque processus possède un identifiant appelé PID (Process Identification). Ce PID est un nombre entier.
Le premier processus créé au démarrage du système à pour PID 0, le second 1, le troisième 2, etc. Le système d’exploitation utilise un compteur qui est incrémenté de 1 à chaque création de processus, ce qui lui permet d’attribuer les PID aux processus.
Chaque processus possède également un PPID (Parent Process Identification). Ce PPID permet de connaitre le processus parent d’un processus.
Dans l’arbre donné en exemple un peu plus haut :
- le processus
inita un PID de 1 et un PPID de 0, puisqu’il est le fils du processusSwapperqui a un PID de 0 ; - le processus
Swappera un PID de 0, mais ne possède pas de PPID (c’est le seul dans cette situation).
Remarque : sous Linux, le processus init est considéré comme le premier processus créé. Il a toujours un PID de 1 et un PPID de 0.
Arbre de processus
On considère l’arbre des processus suivant sous Linux :
Les processus sont créés suivant l’ordre de parcours en largeur de l’arbre.
Donner les PID et PPIDD de chaque processus.
Correction
Identification de processus
Extrait du sujet 1 de Métropole juin 2021
La commande UNIX ps présente un cliché instantané des processus en cours d’exécution.
Avec l’option -eo pid,ppid,stat,command, cette commande affiche dans l’ordre l’identifiant du processus PID (process identifier), le PPID (parent process identifier), l’état STAT et le nom de la commande à l’origine du processus.
Les valeurs du champ STAT indique l’état des processus :
- R : processus en cours d’exécution ;
- S : processus endormi.
Sur un ordinateur, on exécute la commande ps -eo pid,ppid,stat,command et on obtient un affichage dont on donne ci-dessous un extrait :
$ ps -eo pid,ppid,stat,command
PID PPID STAT COMMAND
1 0 Ss /sbin/init
.... .... .... ....
1912 1908 Ss Bash
2014 1912 Ss Bash
1920 1747 Sl Gedit
2013 1912 Ss Bash
2091 1593 Sl /usr/lib/firefox/firefox
5437 1912 Sl python programme1.py
5440 2013 R python programme2.py
5450 1912 R+ ps -eo pid,ppid,stat,command
À l’aide de cet affichage, répondre aux questions ci-dessous.
1. Quel est le nom de la première commande exécutée par le système d’exploitation lors du démarrage ?
2. Quels sont les identifiants des processus actifs sur cet ordinateur au moment de l’appel de la commande ps ? Justifier la réponse.
3. Depuis quelle application a-t-on exécuté la commande ps ? Donner les autres commandes qui ont été exécutées à partir de cette application.
4. Expliquer l’ordre dans lequel les deux commandes python programme1.py et python programme2.py ont été exécutées.
5. Peut-on prédire que l’une des deux commandes python programme1.py et python programme2.py finira avant l’autre ?
Correction
Interblocage
- Mettre en évidence le risque de l’interblocage (deadlock).
Lors de leur exécution, les processus peuvent utiliser des ressources. Dans certains cas, lorsque deux processus s’exécutent de façon concurrentielle, il peut se produire un phénomène particulier appelé interblocage (deadlock). L’exemple ci-dessous illustre ce phénomène :
Imaginons deux processus P1 et P2 et deux ressources R1 et R2. Initialement, les deux ressources sont libres, c’est-à-dire utilisées par aucun processus.
| Étape | État au début de l’étape | Déroulement de l’étape | |||
|---|---|---|---|---|---|
| P1 | P2 | R1 | R2 | ||
| 1 | Élu | Prêt | Libre | Libre | P1 commence son exécution. Il demande R1 et se bloque. R1 est libre donc P1 repasse à l’état prêt. P2 passe à l’état élu |
| 2 | Prêt | Élu | Utilisée | Libre | P2 demande R2 et se bloque. Il obtient immédiatement R2 et repasse à l’état prêt. Suivant l’ordonnancement, P2 repasse immédiatement à l’état élu et poursuit son exécution (P1 reste dans l’état prêt). |
| 3 | Prêt | Élu | Utilisée | Utilisée | P2 demande R1 et se bloque. Comme P1 est dans l’état prêt, il n’a pas eu l’occasion de libérer R1 puisqu’il n’a pas eu l’occasion de l’utiliser (pour utiliser R1, P1 doit être dans l’état élu). P1 repasse dans l’état élu. |
| 4 | Élu | Bloqué | Utilisée | Utilisée | Avant de libérer R1, P1 demande à utiliser R2. Comme R2 n’a pas encore été libéré par P2, R2 n’est donc pas disponible. P1 se retrouve bloqué. |
| 5 | Bloqué | Bloqué | Utilisée | Utilisée | P1 possède R1 et est bloqué (attente de R2). P2 possède R2 et est bloqué (attente de R1). Pour que l’un des processus puisse se débloquer, il faut qu’une des ressources se libère. Mais aucune des ressources ne peut se libérer car elles sont utilisées par des processus qui sont bloqués. Bref, la situation ne peut pas évoluer ! |
Remarque. Il existe plusieurs solutions permettant soit de mettre fin à un interblocage (cela passe par l’arrêt forcé d’un des deux processus fautifs), soit d’éviter les interblocages (mais ces solutions ne seront pas étudiées en terminale.)
Gestion des ressources et interblocage 1
Extrait du sujet 1 de Métropole mars 2021
On considère trois processus P1, P2 et P3. Ceux-ci s’exécutent et utilisent une ou plusieurs ressources parmi R1, R2 et R3. Parmi les scénarios suivants, lequel provoque un interblocage ? Justifier.
| Scénario 1 | Scénario 2 | Scénario 3 |
|---|---|---|
| P1 acquiert R1 | P1 acquiert R1 | P1 acquiert R1 |
| P2 acquiert R2 | P2 acquiert R3 | P2 acquiert R2 |
| P3 attend R1 | P3 acquiert R2 | P3 attend R2 |
| P2 libère R2 | P1 attend R2 | P1 attend R2 |
| P2 attend R1 | P2 libère R3 | P2 libère R2 |
| P1 libère R1 | P3 attend R1 | P3 acquiert R2 |
Correction
Gestion des ressources et interblocage 2
Extrait du sujet 2 de Métropole mars 2021
Dans un bureau d’architectes, on dispose de certaines ressources qui ne peuvent être utilisées simultanément par plus d’un processus, comme l’imprimante, la table traçante, le modem.
Chaque programme, lorsqu’il s’exécute, demande l’allocation des ressources qui lui sont nécessaires. Lorsqu’il a fini de s’exécuter, il libère ses ressources.
demander (modem)
exécution
libérer (modem)
libérer (table traçante)
demander (imprimante)
exécution
libérer (imprimante)
libérer (modem)
demander (table traçante)
exécution
libérer (table traçante)
libérer (imprimante)
On appelle p1, p2 et p3 les processus associés respectivement aux programmes 1, 2 et 3.
1. Les processus s’exécutent de manière concurrente. Justifier qu’une situation d’interblocage peut se produire.
2. Modifier l’ordre des instructions du programme 3 pour qu’une telle situation ne puisse pas se produire. Aucune justification n’est attendue.
3. Supposons que le processus p1 demande la table traçante alors qu’elle est en cours d’utilisation par le processus p3. Parmi les états suivants, quel sera l’état du processus p1 tant que la table traçante n’est pas disponible :
(a) élu (b) bloqué (c) prêt (d) terminé