Ordonnancement de processus§
Systèmes d’exploitation
auteur: | Pierre-Antoine Champin |
---|---|
adresse: | Département Informatique - IUT - Lyon1 |
licence: | ![]() |
Systèmes d’exploitation
auteur: | Pierre-Antoine Champin |
---|---|
adresse: | Département Informatique - IUT - Lyon1 |
licence: | ![]() |
Rôle de l’ordonnanceur: choisir, parmi tous les processus élibibles, lequel va devenir élu → politique d’ordonnancement
yield
.Note
L’appel système yield
sert au processus à céder le processeur aux autres.
- temps de réponse dépend du processus qui a la main
- tant qu’il ne rend pas la main, les autres doivent attendre
- pénalise les processus courts
- proportion temps d’attente / temps d’exécution
- simple
- surcoût faible
- équitable
Adapté dans les contextes suivants
- nombreux cœurs de calcul
- processus très fréquemment bloqués (gestions E/S)
- machine peu puissante, ou le surcoût doit être minimisé
Utilisations :
+ temps de réponse borné, indépendamment des processus (calculs ou E/S)
+ équitable
- très sensible au choix du quantum
- défavorise les processus orientés E/S (bloqués avant la fin de leur quantum)
Variante de la stratégie précédente :
on prend en compte le ratio du temps que le processus a passé à attendre sur le temps dont il a besoin
Supprime le problème de famine
Mais suppose toujours la connaissance du temps d’exécution
En cas d’attente prolongée dans la dernière file (famine), un processus peut « remonter » progressivement
Chaque file peut avoir une durée de quantum différente
(priorité haute → quantum court)
Certaines stratégies donnent la priorité à certains types de processus (ex: SJN, HRRN, ML Feedback)
On souhaite aussi donner à l’utilisateur la possibilité d’influer sur la priorité d’un processus
Distinction entre :
priorité externe
→ propriété définie par l’utilisateur, variant peu
priorité interne
→ propriété gérée par l’ordonnanceur, variant plus souvent
nice
permet de modifier la priorité externeLe processus n’est pas forcément le bon grain pour mesurer l’équité d’un ordonnanceur
Dans certain cas, on peut souhaite partager le temps processeur équitablement entre
les utilisateurs
→ indépendamment du nombre de processus lancé par chacun d’eux
des groupes d’utilisateurs
→ indépendamment du nombre d’utilisateur et de processus
Objectif : garantir autant que possible aux processus certains délais
Inconvénient : le système doit faire des estimations « dans le pire des cas »
→ dégrade les performances (temps de réponse, débit)
Exemple de stratégie : EDF (Earliest Deadline First)
optimal lorsqu’il est possible de respecter tous les délais…
…mais très mauvais lorsque le système est surchargé
Trois classes de priorité, chacune comportant plusieurs niveaux de priorité
« Temps réel » FIFO
→ une FIFO par niveau de priorité
« Temps réel » tourniquet
→ un tourniquet par niveau de priorité
Autre
→ ML Feedback « amélioré » (priorité utilisateur)
32 niveaux de priorité, divisés en deux classes
« Temps réel » (16-31)
→ priorité fixe, chaque niveau géré par un tourniquet
Variable (0-15)
Sur un système à N processeurs
Exemple : serveur HTTP, gérant de nombreuses connexions simultanées:
utiliser un processus ou un thread par connexion,
utiliser un nombre fixe de threads (potentiellement un seul),
en gérant « à la main » l’ordonnancement entre les connexions.
→ avantages ?