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.
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 :
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 :
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 :
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.
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.
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 » :
Un processus passe pendant sa durée de vie par 4 états principaux :