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. |
Comme nous l'avons vu en première, le système d'exploitation(Linux, Windows, MacOs...) est un programme particulier situé entre le matériel et les applications qui a pour de rôle de coordonner l'ensemble des tâches qui sont exécutées par l'ordinateur. Cette année, nous allons voir comment le système d'exploitation charge les programmes dans la mémoire de masse et lance leur exécution en leur créant des processus afin de pouvoir les gérer lors de leur exécution.
Un programme est statique: c'est un fichier contenant une suite d'instructions qui lorsqu'elles sont exécutées modifient l'état du processeur et de la mémoire afin de réaliser une tâche donnée.
Un même programme peut-être exécuté plusieurs fois sur une même machine, il faut alors allouer à chacune de ces exécution des ressources de mémoire et de processeur distinctes qui peuvent varier au cours de ces exécutions.
Un processus est dynamique: c'est une instance d'exécution d'un programme sur une machine de son lancement jusqu'à sa fin.
Si vous êtes sous linux ou OSX, vous pouvez simplement lancer un terminal pour ouvrir une console. Sinon vous pouvez lancer une instance jupyterlab en ligne graĉe à .
Sous linux, les programmes sont par
convention situées dans les dossiers
bin
pour binaries en anglais:
/bin/
: commandes de base nécessaires au démarrage et à l'utilisation d'un système minimaliste./sbin/
: Exécutables pour les administrateurs (abréviation de system binaries, soit binaires
système en français)./usr/bin/
: Binaires exécutables qui ne sont pas déjà présents dans /bin
et donc pas
indispensables à un système minimaliste. On peut lister les programmes avec la commande ls
et les exécuter en tapant leur nom dans une
console.
# la commande ls pour liste (vue en première)
ls /bin
ls /sbin
ls /usr/bin
Vous pouvez afficher un programme en particulier grâce à la commande cat
.
cat /bin/ls
Comme vous le voyez c'est un fichier binaire car ce programme a été compilé pour s'exécuter plus rapidement.
Vous pouvez lancer un programme en particulier en écrivant son nom
(sans préciser son chemin
s'il appartient au PATH
).
# affichage sortie
echo "Voulez-vous continuer"
# lecture entrée
read
Maintenant si vous voulez lister les processus en cours d'exécution on utilise la commande ps
.
# affiche mes processus en exécution
ps
# affiche tous les processus
ps -A
# affiche une aide simple
ps --help s
Voici un exemple de sortie avec l'option -l
pour obtenir plus détails:
jovyan@jupyter-jupyterlab-2djupyterlab-2ddemo-2dgmyobfo6:~$ ps -lA
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 1000 1 0 0 80 0 - 137942 epoll_ ? 00:00:45 jupyter-noteboo
0 Z 1000 2293 1 0 80 0 - 0 - ? 00:00:00 dash <defunct>
4 S 1000 4031 1 0 80 0 - 5116 wait pts/0 00:00:00 bash
4 S 1000 4900 4031 0 80 0 - 5083 select pts/0 00:00:00 bash
4 S 1000 5105 1 0 80 0 - 5116 wait pts/1 00:00:00 bash
0 R 1000 5984 5105 0 80 0 - 6910 - pts/1 00:00:00 ps
On peut créer des affichages particuliers par exemple pour voir quels processus sont les plus gourmands en mémoire: ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
PID PPID CMD %MEM %CPU
1 0 /srv/conda/envs/notebook/bi 0.1 17.0
122 1 /srv/conda/envs/notebook/bi 0.0 4.6
84 1 /bin/bash -l 0.0 1.7
137 84 ps -eo pid,ppid,cmd,%mem,%c 0.0 0.0
138 84 head 0.0 0.0
Enfin on peut tuer un processus avec la commande kill
.
# tuer avec le PID processus id
kill 122
# tuer par le nom du programme ATTENTION cela tue votre instance binder
# pkill jupyter
Un processus n'a pas seulement besoin d'accéder au processeur, mais il a souvent besoin d'accéder à des ressources autres comme:
Ces ressources externes étant beaucoup moins rapides que le processeur, elles bloquent les processus lors de leur exécution.
Ainsi, lors de la vie d'un processus, celui-ci peut passer par trois états:
BLOQUÉ: le processus est en cours d'exécution, mais attend une ressource en mémoire par exemple, il quitte le processeur pour libérer les ressources.
Image par Pixeltoo sur Wikipédia français — Transféré de fr.wikipedia à Commons par Bloody-libu utilisant CommonsHelper., Domaine public, Lien
À un instant donné, il y a souvent davantage de processus à exécuter que de processeurs.
Lors de leur lacement les processus sont placés dans une file d'attente.
L’ordonnanceur désigne le composant du noyau du système d'exploitation choisissant l'ordre d'exécution des processus sur les processeurs d'un ordinateur.
Il existe divers algorithmes d'ordonnancement:
Article Wikipédia sur l'ordonnancement
Un interblocage (ou étreinte fatale, deadlock en anglais) est un phénomène qui peut se produire lorsque des processus s'attendent mutuellement.
Par & Le code de ce fichier SVG est valide.& Ce diagramme a été créé avec Dia par VolodyA! V Anarhist. — Travail personnel, FAL, Lien
Deux processus en concurrence pour deux ressources dans un ordre opposé.
By Abacoo - Own work, CC BY-SA 4.0, Link
Coffman a prouvé en 1971 qu'il y a quatre conditions nécessaires pour qu'un blocage puisse avoir lieu.
Voir l'article Wikipédia Conditions de Coffman pour plus de détails.
Il existe plusieurs façons de gérer les interblocages: