Ordonnanceur (scheduler) [2]

Transcription

Ordonnanceur (scheduler) [2]
Ordonnanceur (scheduler) [1]
Systèmes d’exploitation
L’ordonnancement des processus
Lorsque +sieurs processus sont prêts, le SE doit choisir le processus à
exécuter
C’est l’ordonnanceur (scheduler) qui s’acquitte de cette tâche
L’algorithme utilisé est l’algorithme d’ordonnancement
L’ordonnanceur ne fournit pas un mécanisme, mais prend des
décisions concernant l’équité, l’efficacité, le temps de réponse, le
temps d’exécution et le rendement
Un bon algo doit :
–
–
–
–
–
S’assurer que chaque processus reçoit sa part de temps CPU
Utiliser le CPU à 100%
Minimiser le temps de réponse pour les utilisateurs en mode interactif
Minimiser l’attente des utilisateurs qui travaillent en traitement par lots
Maximiser le nombre de travaux effectués en une heure
Certains de ces objectifs sont contradictoires
Ordonnanceur (scheduler) [2]
Les ordonnanceurs doivent prévoir que chaque processus est unique et imprévisible
(impossible d’estimer le tps de calcul avant un blocage)
Pour assurer qu’aucun processus ne s’exécute pendant trop de temps, pratiquement
tous les ordinateurs ont un compteur de temps (timer) ou une horloge qui génère
périodiquement une interruption (un signal)
A chaque interruption le système reprend la main et décide si le processus courant
doit poursuivre son exécution ou s’il a épuisé le temps CPU qui lui était imparti, le
processeur est alors alloué à un autre processus
Cette stratégie qui permet de suspendre des processus prêts est appelée
ordonnancement avec réquisition (preemptive scheduling) et s’oppose à la méthode
d’exécution jusqu’à achèvement (ordonnancement sans réquisition) des premiers
systèmes à traitements par lots
Les algorithmes d’ordonnancement sans réquisition sont simples et faciles à mettre
en œuvre mais inadaptés à des systèmes généraux à plusieurs utilisateurs
L’ordonnancement circulaire
(tourniquet) [2]
Le seul problème est la durée du quantum !
La commutation de processus (ou commutation de contexte) requiert un
certain tps de gestion (sauvegarde et restitution des registres, …)
Durée de commutation : 5 ms et quantum : 20 ms Ä 20% du temps
CPU gâché pour la gestion : overhead
Solution : augmenter le quantum à 500 ms (Ä 1% pour gérer)
PB : 10 utilisateurs interactifs lancent leur programme presque en même
temps : le premier est lancé immédiatement, le second devra attendre ½
seconde et ainsi de suite. Le dernier attendra pendant 5 secondes !
Conclusion : un quantum trop petit provoque trop de commutations de
processus et abaisse l’efficacité du processeur, alors qu’un quantum
trop élevé augmente les temps de réponse de courtes commandes en
mode interactif
Un quantum de 100 ms est un compromis raisonnable
L’ordonnancement circulaire
(tourniquet) [1]
Un des algos les plus anciens, les plus simples, les plus fiables et les
plus utilisés est le tourniquet (round robin)
Chaque processus possède un intervalle de tps, son quantum, durant
lequel il est autorisé à s’exécuter
Si un processus s’exécute toujours au bout de son quantum, le CPU
est réquisitionné et alloué à un autre processus
Si le processus se bloque ou se termine avant la fin de son quantum,
le CPU est immédiatement alloué à un autre processus
L’ordonnanceur doit mémoriser une liste de processus prêts , lorsque
que le quantum est épuisé le processus est mis en fin de liste
Processus en cours
Processus suivant
B F D G A
Processus en cours
Processus suivant
Quantum de B épuisé
F D G A B
L’ordonnancement avec priorité [1]
Le modèle du tourniquet suppose que tous les processus
sont d’égale importance
Il reste qu’il est souvent utile que des processus soient plus
prioritaires que d’autres
Ceci conduit à un ordonnancement avec priorité
Idée : chaque processus à une priorité et on lance le
processus prêt dont la priorité est la plus élevée
Pour éviter que les processus de priorité élevée s’exécutent
indéfiniment, l’ordonnanceur diminue la priorité du processus
élu à chaque interruption d’horloge
Si cette priorité devient inférieure à celle du 2ème processus
de plus haute priorité, la commutation a lieu
1
L’ordonnancement avec priorité [2]
La commande nice d’UNIX permet à un utilisateur de réduire la priorité
de son processus pour être gentil envers les autres utilisateurs
(personne ne s’en sert !)
Les priorités peuvent être statiques ou dynamiques
Ex : les processus qui font beaucoup d’E/S, attendent la majeure partie
du tps la fin d’une E/S ; il faut donc leur allouer le CPU dès qu’ils le
demandent
Un bon algo consiste à donner à ces processus la priorité 1/f où f est la
fraction du quantum consommée
Un processus qui n’a utilisé que 2 ms de son quantum de 100 ms aura
une priorité de 50, alors qu’un autre qui se sera exécuté durant 50 ms
avant de se bloquer aura une priorité de 2 ; un processus qui aura
consommé tout son quantum aura une priorité de 1
Les files multiples
Comment répartir les processus dans les classes de priorités
Idée : A chaque dépassement de quantum
doubler son quantum et diminuer sa priorité
Ex : Un processus dure 100 quanta : il occupe 7 fois le CPU
(1,2,4,8,16,32,64) [37 quanta pour le dernier]
le processus descendant de priorité, il s’exécute de moins en
moins fréquemment et ménage donc le CPU pour les
processus courts en mode interactif
D’autres algos ont été proposés (ex : XDS 940 répartition
suivant 4 classes : terminal, E/S, quantum court, quantum
long)
L’ordonnancement
du plus court d’abord [2]
n travaux (t1, t2, …, tn), tps moyen = (n*t1+(n-1)*t2+ … + tn)/n
Le temps du premier travail intervenant davantage, il doit
donc être le plus court
L’algorithme du plus court d’abord minimise le tps
moyen d’exécution
Comment l’appliquer aux processus interactifs
Idée : souvent un proc = exec, attente, exec, attente, ….
Considérer chaque exec comme un proc particulier
Il reste à déterminer le + court des processus restant
Difficile, voire impossible, il faudra se contenter d’une
estimation
L’ordonnancement avec priorité [3]
Il est souvent pratique de regrouper en classe les processus en
fonction de leur priorité et d’utiliser l’ordonnancement avec priorité
entre les différentes classes et le tourniquet au sein de chaque classe
Tête des
Processus exécutables
files d’attente
Priorité 3
(Priorité la plus élevée)
B F D G
C J E V A
T
Priorité 4
(Priorité la plus basse)
Priorité 1
Priorité 2
Algo : tant que classe i non vide : tourniquet ; i=i-1;
Si les priorités ne sont pas ajustées de tps en tps, risque de famine de
CPU pour les processus de plus faible priorité
L’ordonnancement
du plus court d’abord [1]
Algorithme plus adapté au traitement par lots et pour lequel
les temps d’exécution sont connus à l’avance (ex :
sauvegarde hebdomadaire)
Idée : lorsque des travaux de même importance se trouvent
dans une file d’attente, l’ordonnanceur doit choisir le plus
court d’abord
Ex : 4 jobs A,B,C,D dont les tps sont 8,4,4,4 minutes
– exécution dans cet ordre : tps écoulé avant la fin d’exécution : 8
minutes pour A, 12 pour B, 16 pour C et 20 pour D Ämoyenne =
14 minutes
– exécution du plus court d’abord : tps écoulés : 4,8,12,20
Ämoyenne = 11 minutes !
L’ordonnancement
du plus court d’abord [3]
Estimation basée sur le comportement passé du processus
Soit T0 le tps estimé par une exec et T1 le tps suivant mesuré ; le tps
estimé = moyenne pondérée des 2 nombres : aT0+(1-a)T1
Pour a=½, les estimations successives sont :
T0, T0/2+T1/2, T0/4+T1/4+T2/2, T0/8+T1/8+T2/4+T3/2
Cette méthode d’estimation s’appelle le vieillissement (aging)
Stratégie du + court optimale uniquement si les travaux sont
disponibles simultanément :
Ex : 5 travaux (A à E) dont les tps sont 2,4,1,1 et 1 arrivent aux instants
0,0,3,3 et 3
– stratégie du + court (A,B,C,D,E) : attente moyenne = 32/5=6.4
– stratégie optimale (B,C,D,E,A) : attente moyenne = 31/5=6.2
2
L’ordonnancement garanti
Autre approche : garantir à l’utilisateur une certaine
performance
Promesse facile à tenir : n utilisateurs connectés, chaque
utilisateur reçoit 1/n de la puissance du CPU
Le système mémorise le tps CPU consommé par chaque
utilisateur et calcule le rapport entre le tps CPU consommé et
le tps CPU auquel un utilisateur a droit
L’algo consiste à choisir le processus qui a le plus faible
rapport jusqu’à ce que celui-ci dépasse celui du processus le
plus proche
Algo semblable appliqué aux systèmes tps réels où il faut
impérativement respecter des délais
Décision et mécanisme
Nous avons supposé jusqu’à présent que tous les processus été en
compétition, mais ceci est souvent inexact !
Ex : un processus serveur père qui délègue des tâches à ses fils,
certaines étant plus prioritaires
Aucun ordonnanceur n’acceptant de directives des processus,
l’ordonnanceur effectuera rarement le meilleur choix !
Solution séparer mécanisme et décision
Ex: le noyau utilise un ordonnancement avec priorité et fournit un appel
système permettant à un processus de modifier la priorité de ses fils
De cette manière, le père peut contrôler l’ordonnancement de ses fils
bien qu’il ne réalise pas l’ordonnancement
Le mécanisme est situé dans le noyau et les décisions sont prises par
les processus utilisateurs
L’ordonnancement à 2 niveaux [1]
Nous avons supposé jusqu’ici que tous les processus prêts se
trouvaient en mémoire
La mémoire centrale étant limitée, certains de ces processus devront
être gardés sur disque
Les conséquences sur l’ordonnancement sont importantes : tps de
commutation 2 à 3 fois + élevé
L’ordonnanceur à 2 niveaux facilite le traitement des processus
stockés sur disque :
– Un sous-ensemble des processus prêts est en mémoire
– L’ordonnanceur ne choisit pendant un moment que les processus de ce sousensemble
– Périodiquement, un ordonnanceur de plus haut niveau retire de la mémoire les
processus qui y sont restés assez longtemps et les remplace par des processus
qui sont sur disque depuis trop de tps
L’ordonnancement à 2 niveaux [2]
L’ordonnanceur de bas niveau choisit des processus en
mémoire alors que l’ordonnanceur de haut niveau se charge
du va-et-vient des processus entre la mémoire et le disque
Les critères suivants interviennent dans le choix de
l’ordonnanceur de haut niveau :
–
–
–
–
Depuis combien de tps un processus a-t-il été rapporté du disque ?
Combien de tps CPU le processus a-t-il eu récemment ?
Quelle est la taille du processus ? (les petits ne sont pas très gênants)
Quelle la priorité du processus ?
Pour cet ordonnanceur de haut niveau, il est possible
d’utiliser un des algos présentés
3

Documents pareils