2 Les politiques d'ordonnancement

Définition : Politique d'ordonnancement
La politique d'ordonnancement détermine le choix d'un processus à élire parmi tous ceux qui sont prêts.

2.1 Objectifs des politiques d'ordonnancement

 
 
Les buts de l' ordonnancement diffèrent en fonction du type de systèmes.
  • Systèmes de traitements par lots. Le but est de maximiser le débit du processeur ; c'est-à-dire le nombre moyen de processus traités par unité de temps.
  • Systèmes interactifs. Les buts principaux de l'ordonnancement sont premièrement de maximiser le taux d'occupation du processeur, c'est-à-dire le rap port entre le temps où le processeur est actif et le temps total. En théorie, ce taux peut varier entre 0% et 100 % ; dans la pratique, on peut observer un taux d'occupation variant entre 40 % et 95 %. Deuxièmement, on va chercher à minimiser le temps de réponse des processus, c'est-à-dire la durée séparant l'instant de soumission du processus au système de la fin d'exécution du processus. Au mieux, le temps de réponse peut être exactement égal au temps d'exécution du processus, lorsque le processus a immédiatement été élu et s'est exécuté sans être préempté.
  • Systèmes temps réel. Le but principal est d'assurer le respect des contraintes de temps liées aux processus.

2.2 Les principales politiques d'ordonnancement

 
 
Nous décrivons ci-dessous les politiques mises en oeuvre dans des systèmes interactifs ou à traitements par lots. Les politiques spécifiques aux systèmes temps réel sont abordées dans la leçon suivante.
2.2.1 Politique d'ordonnancement "premier arrivé, premier servi" (FIFO).
C'est une politique à l'ancienneté, sans réquisition ; l'unité centrale est allouée selon l'ordre de soumission des processus. Dans cette politique, des processus de faible temps d'exécution peuvent être pénalisés parce qu'un processus de longue durée les précède dans la file.
Fig 4 : Politique Premier Arrivé, Premier Servi
2.2.2 Politique d'ordonnancement "plus court d'abord"
Cette politique tente de remédier à l'inconvénient mentionné pour la politique précédente. Maintenant, l'unité centrale est allouée au processus de plus petit temps d'exécution. Cette politique est également une politique sans réquisition. Elle a la propriété de minimiser le temps de réponse moyen pour l'ensemble des algorithmes d'ordonnancement sans réquisition. Elle pénalise les travaux longs. Elle impose également d'estimer la durée des processus ce qu'on ne connaît pas habituellement. Il existe une version avec réquisition de cette politique appelée "temps restant le plus court d'abord" : dans ce cas, le processus en exécution restitue le processeur lorsqu'un nouveau processus de temps d'exécution inférieur à son temps d'exécution restant devient prêt.
2.2.3 Politique d'ordonnancement par tourniquet (Round Robin)
On définit une tranche de temps appelée quantum qui peut varier de 10 ms à 100 ms. Chaque processus présent dans la file des processus prêts acquiert le processeur à tour de rôle, et ce pour au maximum un temps égal au quantum de temps. Si le processus a terminé son exécution avant la fin du quantum, il libère le processeur et le processus suivant dans la file des processus prêts est élu. Si le processus n'a pas terminé son exécution avant la fin du quantum, il perd le processeur et est réinséré en fin de file des processus prêts. Cette politique du tourniquet est usuellement utilisée dans les systèmes en temps partagé. Sa performance dépend largement de la taille du quantum. Un quantum trop grand augmente les temps de réponse alors qu'un quantum trop petit multiplie les commutations de contexte jusqu'à les rendre non négligeables.
Fig 6 : Politique par tourniquet
2.2.4 Politique d'ordonnancement par priorités constantes
Un niveau de priorité constant est affecté à chaque processus et à un instant donné, le processus élu est toujours celui de plus forte priorité. Cet algorithme présente une version sans réquisition et une version avec réquisition. Le défaut de cette politique est le risque de famine encouru par le processus de faible priorité. Une solution à ce problème est de faire "vieillir" la priorité des processus en attente, c'est-à-dire d'augmenter celle-ci en fonction du temps d'attente. La priorité des processus devient ainsi variable.

Fig 7 : Politique par priorités constantes
2.2.5 Politique d'ordonnancement par files de priorités constantes multiniveaux avec ou sans extinction de priorité
 
 
Les politiques présentées jusqu'à présent utilisent une seule file d'attente des processus prêts. On choisit ici de définir plusieurs files de processus prêts, chaque file correspondant à un niveau de priorité ; on peut alors avoir n files de priorités différentes variant de 0 à n-1. Dans une file donnée, tous les processus ont la même priorité et sont servis soit selon une politique à l'ancienneté sans préemption , soit selon une politique de tourniquet. Le quantum peut être différent selon le niveau de priorité de la file. L' ordonnanceur sert d'abord tous les processus de la file de priorité n, puis ceux de priorité n-1 dès que la file de niveau n est vide et ainsi de suite...
On peut définir deux variantes de l'algorithme, fonction de l'évolution de la priorité des processus :
  • les priorités des processus sont constantes tout au long de leur exécution. A ce moment-là, un processus en fin de quantum est toujours réinséré dans la même file d'attente, celle correspondant à son niveau de priorité.
  • les priorités des processus évoluent dynamiquement en fonction du temps de service dont a bénéficié le processus. Ainsi un processus de priorité n, à la fin du quantum de la file n, si il n'a pas terminé son exécution, n'est pas réinséré dans la file de priorité n, mais dans la file de priorité n-1. Et ainsi de suite... On cherche ici à minimiser les risques de famine pour les processus de faible priorité en faisant petit à petit baisser la priorité des processus de plus forte priorité.

Fig 8 : Politique par priorités multiniveaux avec ou sans extinction de priorité
2.2.6 Les politiques d'ordonnancement sous le système Linux
 
 
Il existe trois politiques (classes) d' ordonnancement dans Linux qui correspondent aux politiques définies dans la norme pour les systèmes d'exploitation ouverts, POSIX.: deux sont dites temps réel, SCHED_FIFO et SCHED_RR, la troisième est classique SCHED_OTHER. On peut attribuer un processus à l'une de ces trois classes grâce à l'appel système : sched_setscheduler(). Comme dans les systèmes Unix, la politique d'ordonnancement SCHED_OTHER de Linux a plusieurs objectifs : avoir de bons temps de réponses, assurer une bonne capacité de traitement et essayer de répartir équitablement le temps CPU entre les différents processus. Elle correspond à ce qu'on appelle la politique "en temps partagé". Chaque processus Linux a une priorité variable qui dépend de nombreux facteurs parmi lesquels nous pouvons citer le taux d'utilisation de la CPU et l'intensité des entrées / sorties. 
Il existe deux autres classes d'ordonnancement dites temps réel : SCHED_FIFO et SCHED_RR.Les rubriques "policy" et "rt_priority" stockées dans la structure des processus Linux permettent de leur attribuer une classe d'ordonnancement et une priorité temps réel. SCHED_FIFO et SCHED_RR ne sont pas des classes temps réel strictes, mais relatives. Quand un processus temps réel est prêt, tous les processus de priorité inférieure sont mis de côté. Un processus de la classe SCHED_FIFO peut s'exécuter jusqu'à la fin de son traitement ou jusqu'à ce qu'un processus de la classe SCHED_FIFO de priorité temps réel plus forte soit prêt. Un processus de la classe SCHED_RR est interrompu à la fin de son quantum de temps ou dès qu'un processus de priorité temps réel (SCHED_FIFO ou SCHED_RR) supérieure est prêt. Il existe dans cette classe un principe de tourniquet parmi les processus de même priorité.
Ordonnancement Ordonnancement de processus Algorithmes d'ordonnancement