Académique Documents
Professionnel Documents
Culture Documents
Main 4
Main 4
Système d’exploitation
Module: M18 - IRISI S3
FST Marrakech
Université Cadi Ayyad
L’ordonnancement CPU
L’ordonnancement : Définition
L’ordonnancement
L’ordonnancement (scheduling) est un ensemble de règles définissant
l’ordre d’exécution des processus en tenant compte de la disponibilité des
ressources nécessaires (processeurs), de manière à optimiser un ou plusieurs
critères.
On peut dire, également, que l’ordonnancement consiste à allouer une ou
plusieurs tranches de temps processeur à chaque processus existant dans le
système.
L’ordonnancement de processus s’articule autour de 2 composantes :
I La file d’attente des processus : elle regroupe les descripteurs des processus
prêts. C’est à partir de cette file que l’ordonnanceur choisit le processus à
exécuter.
I L’algorithme d’ordonnancement à appliquer : il organise les descripteurs de
processus dans un ordre qui reflète la stratégie appliquée.
Les différents états de transition du processus entre les files d’attente sont
résumés comme suit:
L’ordonnanceur
Critère Optimisation
Utilisation CPU Maximiser
Débit Maximiser
Temps de rotation Minimiser
Temps d’attente Minimiser
Temps de réponse Minimiser
Stratégies d’ordonnancement
Algorithmes d’ordonnancement
Il existe un certain nombre d’algorithmes d’ordonnancement très utilisés
dans la gestion des processus :
24 3 3
(27+24+0)/3
I Temps d’attente P1 : 0, P2 : 24, P3 : 27, temps d’attente moyen : 17
Si les processus étaient arrivés dans l’ordre P2 , P3 et P1 , les résultats
seraient différents :
le temps moyen d’attente avec une politique FCFS n’est généralement pas
minimal et peut varier substantiellement si les durées d’exécution des
processus varient beaucoup.
defavoriser , punir
L’algorithme FCFS tend à pénaliser les travaux courts.
I il n’effectue pas de réquisition; c’est à dire qu’une fois que le processeur a été
alloué à un processus, celui-ci le réquisitionne jusqu’à ce qu’il termine ou qu’il
se bloque.
L’algorithme FCFS n’est pas recommandé pour les systèmes à temps
partagé.
I où il est important que l’utilisateur obtienne le processeur à des intervalles
réguliers.
I Il peut paraître désastreux de permettre qu’un processus garde le processeur
pendant une période étendue.
I Temps d’attente P1 : 0, P2 :
8 - 2, P3 : 7 - 4, P4 : 12 - 5
I Temps d’attente moyen : 4
Il a été prouvé que l’algorithme SJF est optimal dans le temps dans le sens
qu’il obtient le temps d’attente le plus court pour un ensemble de processus
donné.
Toutefois, cet algorithme est difficile à implémenter pour une raison simple
: Comment peut-on connaître le temps d’exécution d’un processus à l’avance
?
I l’inconvénient de la nécessité de connaissance du temps de service à priori et
le risque de privation des tâches les plus longues.
Ainsi, l’algorithme SJF nécessite le calcul des priorités périodiquement et
un réarrangement de la la file d’attente.
Shortest-Remaining-Time-First (SRTF)
L’algorithme du Temps Restant le plus Court
C’est la version préemptive de l’algorithme SJF
Lorsqu’un processus est en cours d’exécution, et qu’un nouveau processus
ayant un temps d’exécution plus court que celui qui reste pour terminer
l’exécution du processus en cours, ce processus est arrêté (préempté), et le
nouveau processus est exécuté.
Tout comme l’algorithme SJF, l’algorithme SRTF favorise les travaux courts
: les travaux longs en revanche peuvent être victimes de famine.
I Temps d’attente P1 : 11 - 2,
P2 : 5 - 4, P3 : 0, P4 : 7 - 5
I Temps d’attente moyen : 3
L’algorithme du Tourniquet
C’est un algorithme qui utilise la politique préemptive, qui s’adapte bien aux
systèmes à temps partagé.
Il alloue le processeur aux processus à tour de rôle, pendant une tranche de
temps appelée quantum.
Le processeur est alloué au premier processus de la file des processus prêts
pendant un quantum de temps;
Si le processus n’a pas terminé son exécution, il est recyclé dans la file des
processus prêts.
Le processeur est alloué à un autre processus :
I A la fin du quantum de temps ⇒ interruption horloge,
I Si le processus actif se bloque ⇒ attente de ressource physique ou logique,
I Fin d’exécution du processus (fin normale ou erreur ).
20,16,12,8,4,
I Temps d’attente P1 : 10 - 4, P2 : 4, P3 : 7
I Temps d’attente moyen : 5.6
5
1
0
0
4
L’implémentation de cette politique peut être gérée avec une seule file
d’attente avec priorité (Le processus le plus prioritaire est en tête de la file)
ou avec plusieurs files d’attente des processus prêts.
Pour définir l’algorithme d’ordonnancement entre les classes, on peut avoir deux
cas :
Cas 1 : Affecter des tranches de temps aux classes.
I Chaque file d’attente obtient une certaine partie du temps processeur,
I Cette partie du temps doit s’ordonnancer entre les différents processus qui la
composent.
Cas 2 : Chaque classe est absolument prioritaire par rapport aux autres
classes de niveau inférieur
I C1 plus prioritaire, Cn moins prioritaire.
I Le processeur est alloué aux processus de la classe la plus prioritaire;
I On ne change de classe que si la classe la plus prioritaire est vide.
I De plus, si un processus d’ une classe plus prioritaire arrive au système, alors
qu’un processus d’une classe moins prioritaire est en train de s’exécuter,
celui-ci doit être interrompu.
inconvenient :
un problem de famine
si un processus arrive , il
va etre executer
Ordonnancement des
pthreads
Principe
Principe
Principe
comment sont traités les threads de même priorité (i.e de la même file d’attente)?
Les threads de même priorité peuvent être traitées selon deux politiques:
SCHED_FIFO et SCHED_RR .
Principe
Exemple
Portée
Portée
PTHREAD_SCOPE_SYSTEM :
Lorsque l’ordonnancement s’effectue, le
thread est sélectionné parmi l’ensemble des
threads du système (des différents
processus).
I A chaque pthread est associé un thread
noyau.
PTHREAD_SCOPE_PROCESS:
Lorsque l’ordonnancement s’effectue, le
thread est sélectionné parmi l’ensemble des
threads du même processus (programme).
I Les Pthreads d’un même processus sont
prises en charge par un pool de threads
noyau.
I Un nombre maximum de threads noyau
existent pour un processus.
Domaines d’allocation
La discussion de la portée d’ordonnancement devient compliquer dans des
systèmes multiprocesseurs.
La plupart des S.E permettent aux collections de CPU d’être traitées comme
des unités séparées à des fins d’ordonnancement.
La norme Pthreads reconnaît l’existence de ces groupements que les appelle
« domaines d’allocation d’ordonnancement ».
Mais, elle ne définit pas les politiques et les interfaces qui les concernent.
Attributs
Par défaut, un nouveau thread est créé avec les attributs d’ordonnancement
(portée, politique et priorité) de son créateur.
La valeur par défaut est PTHREAD_INHERIT_SCHED
Si on veut créer un thread avec des attributs d’ordonnancement spécifiques,
il faut modifier la valeur de l’attribut de l’héritage à
PTHREAD_EXPLICIT_SCHED en utilisant la fonction
pthread_attr_setinheritsched :
Valeurs possibles:
I PTHREAD_INHERIT_SCHED (valeur par défaut): l’ordonnancement hérité du
thread appelant.
I PTHREAD_EXPLICIT_SCHED: l’ordonnancement spécifié à la création du thread
Valeurs possibles:
I PTHREAD_SCOPE_SYSTEM (valeur par défaut): A chaque Pthread est associé un
thread noyau.
I PTHREAD_SCOPE_PROCESS : Les Pthreads d’un même processus sont prises en
charge par un pool de threads noyau.
La taille du pool peut être consultée / modifiée par: int
pthread_getconcurrency (void); int pthread_setconcurrency
(int valeur);
Valeurs possibles:
I SCHED_FIFO : Les threads de même priorité sont ordonnancés en FIFO.
I SCHED_RR : Les threads de même priorité sont ordonnancés en tourniquet.
I SCHED_OTHER (valeur par défaut) : Tous les threads sont dans le même
tourniquet, il n’y a pas de niveau de priorité.