Académique Documents
Professionnel Documents
Culture Documents
2019/2020
Plan
o Définition
o Multiprogrammation
o Hiérarchie de processus
o Linux/Unix: Commandes
Définition
Un processus est une entité dynamique qui matérialise un programme en cours d'exécution avec
ses propres ressources physiques (mémoire, processeur, entrée/sortie,…) et logiques (données,
variables, …).
Définition: Multiprogrammation
En multiprogrammation: Plusieurs processus sont exécutés (compiler tout en lisant son mail)
Définition: Multiprogrammation
Définition
Processus utilisateur: lancé par un utilisateur (Compilation, éditeur, jeu, impression, …),
(Explorer,… sur «Windows»)
Dans les systèmes mono programmés, un programme ne quitte pas l’unité centrale avant
de terminer son exécution. Pendant cette période, il dispose de toutes les ressources de la
machine. Par contre, ce n’est pas le cas dans les systèmes multiprogrammés, un processus
peut se trouver dans l’un des états suivants :
- Bloqué : attente qu’un événement se produit ou bien une ressource pour pouvoir
continuer
(3) : Blocage du processus élu dans l’attente d’un événement (E/S ou autres)
(4) : Réveil du processus bloqué après disponibilité de l’événement bloquant (Fin E/S, …)
Un seul processus peut être en exécution (élu) sur n’importe quel processeur à tout moment.
Commutation de contextes
Lorsqu’un processus est temporairement suspendu, il faut qu’il puisse retrouver l’état où il se
trouvait au moment de suspension, il faut que toutes les informations (Contexte du processus)
dont il a besoin soient sauvegardées pendant sa mise en attente. D’où l’utilisation d’un bloc de
contrôle de processus (Process Control Block «PCB») qui contient toute information
nécessaire à la reprise d’un processus interrompu : Etat du processus (prêt, suspendu, ..),
quantité de mémoire, temps CPU (utilisé, restant), priorité, etc.
Les PCB sont rangés dans une table (table des processus) qui se trouve dans l’espace
mémoire du système.
le contexte mémoire: ce sont des informations mémoire qui permettent de trouver le code
et les données du processus en mémoire centrale
des informations diverses de comptabilisation pour les statistiques sur les performances
système
Hiérarchie de processus
Hiérarchie de processus
Il existe des appels système permettant de créer un processus, charger son contexte et lancer
son exécution (fork, exec sous Unix).
Un processus (père) peut créer d’autre processus (fils) qui hérite les descripteurs de son père.
Ce dernier à son tour peut créer d’autres processus.
Les processus peuvent se terminer ou ils peuvent être éliminés par d’autres processus (la
primitive kill). A la destruction d’un processus, on libère toutes les ressources qu’il avait.
Dans certains cas, la destruction d’un processus entraîne l’élimination de ces descendants;
cette opération n’affecte pas les processus qui peuvent continuer indépendamment de leur père
(processus orphelins).
Un processus orphelin est adopté par le processus numéro 1 (init) et non par son grand-père.
Processus Zombie: est un terme désignant un processus qui s'est achevé, mais qui dispose
toujours d'un PID et reste donc encore visible dans la table des processus, car son père n’est
pas au courant de sa mort. On parle aussi de processus défunt.
Une fois créé, le processus 0 crée un deuxième processus, le processus 1 appelé également
processus INIT
Le processus INIT va créer à son tour un certain nombre de processus : d'une part les
processus DEMONS responsable de fonctions système telles que la surveillance du réseau
(inetd), la gestion de l'imprimante (lpd)..., d'autre part des processus GETTY chargés de la
surveillance des terminaux (un processus par terminal). Le processus INIT trouve l'ensemble
des processus à créer dans le fichier /etc/inittab.
Lorsqu'un utilisateur vient pour utiliser la machine, il se logue sur un terminal. Le processus
GETTY crée alors un nouveau processus (processus LOGIN).
Le processus LOGIN est chargé de lire le login de l'utilisateur, son mot de passe et de vérifier
dans le fichier /etc/passwd que l'utilisateur est autorisé à se connecter à la machine.
Cet interpréteur de commandes va prendre en charge les commandes tapées par l'utilisateur et
pour chacune d'elles il va crée un nouveau processus chargé d'exécuter la commande.
Hiérarchie de processus
Sous Unix les segments Piles et Données (variables) sont dupliqués, le segment code (code
du programme) est partagé.
Contexte utilisateur:
Ressources propres (code du programme, données «variables», pile d’exécution, tty associé
au processus, …).
Contexte système:
Ressources gérées par le SE: pid, ppid, uid, gid, table des fichiers
Contexte registre:
(b) Il s’est produit une erreur (division par zéro, accès à un fichier inexistant par ex.)
Sous Unix, dans tous les cas le processus est tué au final par son père (créateur ou auquel il
a été rattaché), dans le (a) c’est à la demande du fils, dans le (b) c’est à la demande du fils si
l’erreur a été prévue, à la demande du système d’exploitation sinon.
Les options les plus intéressantes sont -e (affichage de tous les processus) et -f (affichage
détaillé).
UID nom de l'utilisateur qui a lancé le processus STIME correspond à l'heure de lancement du processus
PID correspond au numéro du processus TTY correspond au nom du terminal
PPID correspond au numéro du processus père TIME correspond à la durée de traitement du processus
C (facteur de priorité) : plus la valeur est grande, COMMAND correspond au programme qui a généré le
processus.
plus le processus est prioritaire
Il existe une commande pstree qui permet d'afficher les processus sous forme d’arborescence,
c'est-à-dire en visualisant les liens de dépendance entre les processus.
La commande ps est intéressante, mais reste limitée, car elle n'affiche pas les informations en
temps réel => «solution: utilisation de la commande top »
La commande top est beaucoup plus complète que ps. Elle indique beaucoup d'informations très
intéressantes, et surtout lisibles.
La commande top : l'option -o est utilisée avec un mot-clé (cpu, pid,…), on peut choisir
l'ordre d'affichage, c'est-à-dire croissant ou décroissant, en ajoutant un + ou un - devant le
mot-clé.
Par exemple: « top -o cpu + » pour classer la liste des processus affichés par utilisation du
processeur, avec un ordre d’affichage croissant.
La commande top :
Une autre option bien utile qui sert à régler la fréquence des mises à jour est l'option -s, suivie du
nombre de secondes entre chaque mise à jour.
On peut utiliser une combinaison de ces options, comme la commande suivante qui va donner les
processus rangés par utilisation du CPU, et mettra à jour l'affichage toutes les cinq secondes
Plus le nombre est grand, plus la priorité est faible. Par exemple, la valeur 0 donne la priorité la
plus haute, et la valeur 20 donne la priorité la plus faible. La fourchette de valeur dépend du
système d’exploitation qu'on utilise.
Généralement on utilise nice sur des commandes qui prennent du temps. Sur des commandes
courantes l'effet de nice est imperceptible. On l'utilisera par exemple pour compiler un
programme: nice -5 cc monprogramme.c
Si vous voulez arrêter un processus, vous devez connaître son PID, puis vous tapez :
« kill -9 PID_Processus »
Un utilisateur ne peut arrêter que les processus qui lui appartient (qu'il a lancé).
Ctrl + Z => Pour suspendre le processus (ne le tue pas, il l'arrête temporairement jusqu'à ce
que vous le relanciez)