C9.4 : Gestion des processus
La gestion des processus
Les processus
Définition
Un processus est un ensemble d'instructions en cours de traitement par le système d'exploitation.
Propriétés d'un processus
Un processus peut être démarré par l'utilisateur ou par un autre processus.
Un processus dispose : d'un espace mémoire dédié, de droits d'accès aux entrées-sorties...
Le système d'exploitation mémorise, pour chaque processus, un ensemble d'informations appelé PCB (en anglais Process Control Bloc) :
- - un identifiant unique appelé PID (Process Identifier) ;
- - l'état du processus (voir ci-dessous) ;
- - d'autres informations liées aux mémoires et ressources utilisées par le processus.
Différence entre programme et processus
En toute rigueur, le mot programme (ou exécutable) fait référence à un fichier stocké en mémoire contenant du code directement exploitable par le système d'exploitation.
Le mot processus fait référence à l'exécution de ce code.
Lorsqu'on exécute un programme, plusieurs processus peuvent être lancés.
Ordonnancement des processus
L'ordonnanceur est l'élément (ensemble d'instructions) du système d'exploitation qui gère le lancement et l'arrêt des processus.
Nouveau processus
Lorsqu'un nouveau processus est lancé, le système d'exploitation :
- - copie le code en mémoire vive ;
- - initialise son PCB ;
- - ajoute le processus à la file des processus prêts.
Ordonnancement des processus
Il existe plusieurs algorithmes pour le fonctionnement de l'ordonnanceur :
- • Non préemptif : l'ordonnanceur exécute les processus dans l'ordre de la file et dans leur totalité ;
- • Préemptif basée sur le plus petit temps d'exécution : l'ordonnanceur exécute toujours le processus dont le temps d'exécution restant est le plus court ;
- • Préemptif basé sur une rotation des processus en cours d'exécution : à intervalle de temps régulier, l'ordonnanceur arrête le processus en cours et passe au processus suivant de la file des processus prêts ;
- • Préemptif basé sur des priorités ;
- • ...
Interruption et mise en exécution d'un processeur
Lorsque l'ordonnanceur interrompt le processus en cours d'execution, il mémorise son PCB, enfile le processus dans la file des processus prêts.
Lorsque l'ordonnanceur lance (ou relance) l'exécution d'un processus, il le récupère dans la file des processus prêts avec son PCB.
Mise en sommeil (en attente) des processus
Lors de l'exécution d'un processus, si ce processus est en attente d'un événement (par exemple une saisie au clavier), le système d'exploitation mémorise le PCB du processus et place le processus en attente (on dit également en sommeil pour l'anglais sleeping).
Dès que l'événement attendu se produit, le processus est remis dans la file des processus prêts.
Applications
Application n° 1
On s'intéresse à un ordonnanceur non préemptif. Indiquer l'élément du schéma ci-dessus qu'il faut enlever.
Application n° 2
On considère une machine sur laquelle un processus A est lancé à l'instant 0 et un processus B deux unités de temps plus tard.
La durée totale nécessaire pour l'exécution du processus A est de 14 unités de temps et pour le processus B de 5 unités de temps.
Représenter la chronologie de l'exécution des processus pour chacun des fonctionnements suivants de l'ordonnanceur :
- 1. fonctionnement non préemptif
- 2. fonctionnement préemptif avec plus petit temps de séjour.
- 3. fonctionnement préemptif avec changement de processus toutes les 3 unités de temps.
- 4. fonctionnement préemptif avec changement de processus toutes les 5 unités de temps.
Quelques situations qui peuvent poser problème
Utilisation de ressources partagées
Exemple : Opérations bancaire sur un compte
Deux agences d’une banque veulent mettre à jour le même compte bancaire n° 1867A.
Pour cela, l’agence de Nancy effectue les actions suivantes :
- 1. restant = get_account(1867A)
- 2. nouveau_restant = restant + 100
- 3. update_account(1867A, nouveau_restant)
L’agence de Lille effectue les actions suivantes :
- A. solde = get_account(1867A)
- B. nouveau_solde = solde -100
- C. update_account(1867A, nouveau_solde)
Question : Quelles sont les situations qui peuvent se produire ?
Bilan
Lorsque l'exécution des processus est entrelacée (exécution concurrente) et que des ressources partagées sont utilisés, il peut y avoir des conséquences indésirables.
Interblocage
Exemple 1 : Priorité à droite
Exemple 2 : Accès à des périphériques
Supposons que deux processus A et B veulent imprimer, en utilisant la même imprimante, un fichier stocké sur une clé USB. La taille de ce fichier étant supérieure à la capacité du disque, chaque processus a besoin d’un accès exclusif à la clé USB et à l’imprimante simultanément. On a une situation d’interblocage si les deux conditions ci-dessous sont réunies :
- - Le processus A a obtenu l'exclusivité de l’imprimante et demande l’accès à la clé USB.
- - Le processus B a obtenu l'exclusivité de l'accès à la clé USB et demande à utiliser l’imprimante.
Bilan
L'interblocage (deadlock en anglais) peut se produire lorsque les quatre conditions ci-dessous sont présentes :
- • Exclusion mutuelle : Au moins une des ressources du système doit être en accès exclusif par l'un des processus.
- • Rétention des ressources : Un processus détient au moins une ressource et requiert une autre ressource détenue par un autre processus
- • Non préemption : Seul le détenteur d'une ressource peut la libérer.
- • Attente circulaire : Chaque processus attend une ressource détenue par un autre processus.
Visualisation des processus
Avec un système d'exploitation Windows
A faire
Ouvrir le "Gestionnaire de tâches".
Ouvrir le navigateur web. Combien de processus sont créés ? Noter les PID.
Ouvrir un nouvel onglet avec un contenu différent. De nouveaux processus sont-ils créés ? Noter le(s) PID.
Ouvrir une autre fenêtre du navigateur, avec un contenu différent. De nouveaux processus sont-ils créés ? Noter le(s) PID.
Faire "Fin de tâche" pour l'un des processus du navigateur.
Avec un système d'exploitation Linux
Prendre connaissance : les commandes Linux
➤ ps :
Permet d'afficher la listes des processus actifs.
Cette commande dispose de beaucoup d'options :
-e: Affiche tous les processus de tous les utilisateurs-f: Affiche plus d'informations (plus de colonnes)-o: Permet de choisir les informations (les colonnes) à afficher
Les principales informations (colonnes) sont :
USERouUID: nom ou identifiant de l'utilisateur propriétaire du processusPID: ID du processusPPID: ID du processus parentSTAT: état du processus -> S (Dormant), R (en cours d'exécution)...CMD: nom de la commande qui a lancé le processus
Exemples :
ps -efps −eo user,pid,ppid,stat,command
➤ pstree :
Permet d'afficher la listes des processus sous forme d'une arborescente.
➤ top :
Permet d'afficher les processus avec rafraichissement en temps réel.
Un fois lancée, il existe plusieurs options qui s'activent avec les touches du clavier :
M: trie la liste par ordre décroissant d'occupation mémoireP: trie la liste par ordre décroissant d'occupation processeuri: filtre les processus pour ne garder que les processus actifsV: affiche l'arborescence les processusq: quitter le modetop
A faire
Se connecter au Raspberry
Tester les différentes commandes ci-dessus.
Analyser les processus (en utilisant uniquement la command ps et ses options) :
- ☞ Quel est le premier processus lancé ?
- ☞ Quel est le dernier processus lancé ?
- ☞ Combien de processus sont actifs ?
Remonter l'arbre d'un processus (en utilisant uniquement la command ps et ses options) :
- ☞ Lancer la commande
ps −eo user,pid,ppid,stat,command - ☞ Repérer le processus qui correspond à cette commande.
- ☞ En partant de ce processus, remonter jusqu'au processus initial. Lister l'ensemble des processus intermédiaires.