pythonListSelfTest1
Linux & Processus

warning  Cet algorithme peut être mis en oeuvre au travers de l'activité scheduling.


Un processus (ou tâche) correspond à un programme exécuté par le micro-processeur. Un processus comprend le code du programme, mais également la mémoire et les ressources qu'il utilise. Un même programme peut-être lancé plusieurs fois et donc correspondre à plusieurs processus sur la machine à un instant donné. Sous Linux (ou windows) qui est un système multi-tâches, plusieurs processus tournent simultanément : des processus systèmes totalement transparents à l’utilisateur et les tâches lancées par l’utilisateur lui-même (directement ou indirectement). Linux met à notre disposition un certain nombre de commandes utiles à visualisation et la gestion des processus.

Activité découverte

help

Tout d'abord, vous devez vous connectez sous linux. Le plus simple est d'utiliser la Debian sous virtualBox.

Demander de l'aide à votre enseignant ou au référent si besoin.

Une fois connecté, ouvrez cette fiche d'activité dans votre navigateur sous linux.

Puis avec l'éditeur de texte crééz les 3 fichiers suivants :

fichier test1.sh

#!/bin/bash
while true
do
echo 11111111111111111111111111111111111111111111
done

fichier test2.sh

#!/bin/bash
while true
do
echo 2222222222222222222222
done

fichier test.sh

#!/bin/bash
./test1.sh&
./test2.sh&
wait

Ce dernier fichier de commandes va nous permettre de lancer les 2 scripts test1.sh et test2.sh simultanément dans une même console.

Une fois connecté, ouvrez 2 fenêtres Terminal, comme indiqué ci-dessous :

2 terminaux

Dans la console supérieure tapez la commande ./test.sh

Vous devriez voir apparaître dans cette console l'affichage suivant :

11111111111111111111111111111111111111111111
2222222222222222222222
2222222222222222222222
11111111111111111111111111111111111111111111
2222222222222222222222
11111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111
2222222222222222222222
11111111111111111111111111111111111111111111

On voit une succession à peu près équilibrée de lignes de 1 et de lignes de 2.

Maintenant dans le deuxième terminal tapez la commande suivante : ps aux:

Vous obtenez le résultat suivant :

ps aux

Cette commande permet d'afficher la liste des processus qui tournent sur votre machine.

Il y a de nombreux processus, certains dédiés au système d'exploitation, d'autres aux différentes applications qui tournent sur votre machine.

Ceux qui nous intéressent sont les deux processus associés à nos programmes test1.sh et test2.sh.

Sur l'image ci-dessous nous avons rajouté l'entête des colonnes affichées par la commande ps :

ps aux

Nous voyons que pour chaque processus est indiqué le % de mémoire utilisée, le propriétaire, l'heure de lancement, le temps d'exécution, etc et ce qui va nous intéresser plus particulièrement ici le PID (Processus Identifier). Chaque processus est donc identifié par un numéro.

Bien évidemment les PID de vos processus associés à test1.sh et test2.sh ne sont pas les mêmes que ceux présentés ici.

Contrôler la priorité des processus : renice

Chaque processus actif sur le système s'exécute avec une priorité donnée (aussi appelée valeur amicale ou nice value en anglais). Cette valeur peut varier de -20 à +20. La priorité maximale pour un processus est -20. Si elle n'est pas définie, tous les processus s'exécute avec une priorité de 0 par défaut (la priorité de planification de « base »). Les processus ayant la priorité maximale utilisent plus de ressources système que les autres. Les processus ayant une priorité inférieure s'exécuteront lorsque le système sera libéré par les tâches de priorité plus élevée. Les utilisateurs autres que le super-utilisateur root ne pourront que diminuer la priorité de leurs processus dans la fourchette 0 à 20. Le super-utilisateur pourra quant à lui définir de manière arbitraire la priorité de n'importe quel processus.

Nous allons voir maintenant comment modifier la priorité de notre processus associé à test1.sh

Nous allons tout simplement taper dans la console la commande renice +10 2862 où 2862 correspond au PID de notre processus. A vous de mettre le numéro de processus correspondant à votre test1.sh. La valeur +10 indique curieusement (voir paragraphe ci-dessus) que le processus va perdre en priorité.

Vous devriez voir apparaître un affichage similaire à celui-ci dans votre première console :

11111111111111111111111111111111111111111111
2222222222222222222222
2222222222222222222222
2222222222222222222222
11111111111111111111111111111111111111111111
2222222222222222222222
2222222222222222222222
2222222222222222222222
2222222222222222222222

Les lignes de 1 sont toujours là, mais avec une fréquence beaucoup moins élevée.

Pour terminer, voyons comment arréter nos 2 processus de test.

Dans les exemples ci-dessous pensez à remplacer les PID proposés par ceux de VOS PROCESSUS test1.sh et test2.sh !

Pour cela il suffit de taper dans la console les commandes kill 2862 et kill 2863

Comme son nom l'indique cette commande va arréter les 2 processus.

Voyons maintenant comment est géré l'exécution des différents processus et de leur priorité par le système d'exploitation.

Multitâche et politiques d’ordonnancement sous Linux

L’une des fonctionnalités principale du noyau Linux, et plus particulièrement de la partie appelée le « Scheduler » ou Ordonnanceur est de gérer la partie multitâche du système d’exploitation, appelée aussi « multitâche préemptif ». Les fonctionnalités principales de l’ordonnanceur d’un noyau Linux est d’élire un processus parmi d’autres qui occupera le processeur pendant un temps donné avant qu’il ne soit préempté au profit d’un autre processus. Ce choix est fait selon la politique d’ordonnancement appliquée et aussi suivant la priorité associé au processus.

Lorsque le "scheduler" suspend un processus il doit préserver le contenu de la mémoire et des ressources associées à celui-ci.

Vous pouvez-voir ci-dessous un chronogramme présentant l'ordonnancement de différents processus par le « Scheduler » :

scheduling

Un processus passe pendant sa durée de vie par 4 états principaux :

Ressources :

  1. Ordonnancement des processus.
  2. Processus priority.