SEXP1 Chapitre 2 Gestion Du Processeur
SEXP1 Chapitre 2 Gestion Du Processeur
SEXP1 Chapitre 2 Gestion Du Processeur
Chapitre 2
Gestion du
Processeur
1 Introduction ............................................................................................................................................. 2
2 Notions de base ....................................................................................................................................... 2
2.1 Ressource ......................................................................................................................................... 2
2.2 Programme ...................................................................................................................................... 2
2.3 Job ........................................................................................................................................................ 2
2.4 Processus .......................................................................................................................................... 2
2.5 Thread................................................................................................................................................ 2
3 Les Processus ........................................................................................................................................... 3
3.1 Les différents états d’un processus ........................................................................................ 3
3.2 Espace Mémoire alloué à un processus ................................................................................ 4
3.3 Contexte d’un processus ............................................................................................................. 4
3.4 Commutation de Contexte ......................................................................................................... 4
3.5 Opérations sur les processus .................................................................................................... 5
3.6 Hiérarchie des processus ........................................................................................................... 5
3.7 Relations entre les processus ................................................................................................... 5
4 Généralités sur l’ordonnancement des processus .................................................................... 6
4.1 Définition .......................................................................................................................................... 6
4.2 Cycle CPU –Cycle E/S ................................................................................................................... 6
4.3 Ordonnancement préemptif ou non préemptif ................................................................. 6
4.4 Files d’attente de l’ordonnancement ..................................................................................... 6
4.5 Evaluation de la performance de l’ordonnancement ...................................................... 6
5 Algorithmes d’ordonnancement ...................................................................................................... 7
5.1 Ordonnancement FIFO (First In First Out).......................................................................... 7
5.2 Ordonnancement SJF (Shortest Job First) .......................................................................... 7
5.3 Ordonnancement SRTJF (Shortest Remaining Time First) ......................................... 8
5.4 Ordonnancement par priorité .................................................................................................. 8
5.5 Ordonnancement cyclique ......................................................................................................... 9
5.6 Ordonnancement avec des files d’attente multi-niveaux (Multilevel Queue MLQ)
10
5.7 Ordonnancement avec des files d’attente multi-niveaux feedback (MLFQ :
Multilevel Feed-back Queues) ............................................................................................................. 10
6 Cas Pratiques : Unix et Windows ................................................................................................... 11
6.1 Ordonnancement dans le système Unix ............................................................................. 12
6.2 Ordonnancement dans le système Windows ................................................................... 12
1 Introduction
L’objectif de ce chapitre est de présenter les principes de base utilisés par le système
d’exploitation dans la gestion du processeur. On étudiera les algorithmes
d’ordonnancement appliqués dans la majorité des S.E, on donnera des cas concrets sur
les systèmes Unix et Windows.
2 Notions de base
2.1 Ressource
Une ressource dans un système informatique signifie tout composant physique ou
logique de disponibilité limitée (Périphérique connecté, Processeur, M.C, Fichier,
Connexion réseau, etc. .... ).
2.2 Programme
Un Programme est une suite d’instructions séquentielles qui peut être en langage
évolué, objet ou exécutable. Il est stocké sur le disque.
Processus
Programme
Programme
en Code Compilation Programme Edition Chargement en
source Objet de liens Exécutable M.C et Exécution
par le CPU
2.3 Job
Un Job est un programme soumis à la machine par l’utilisateur (lancé). Il peut être
admis (on lui alloue toutes les ressources nécessaires à son exécution comme l’espace
mémoire) et devient alors un processus.
2.4 Processus
2.5 Thread
Le Processus Word
Thread1 Thread2
Saisie Enregistrement
automatique
Document
3 Les Processus
3.1 Les différents états d’un processus
L’état d’un processus détermine sa situation dans le système, vis à vis de ses ressources.
Durant son exécution, un processus (ou thread) peut être dans un de ces cinq états :
Nouveau 2 Terminé
Prêt Exécution
3
4 1
Bloqué
Les transitions possibles entre ces différents états sont illustrées dans la figure 2.3:
1) Le processus est bloqué à cause d’une E/S
2) Le CPU exécute un autre processus
3) Le CPU reprend le processus
4) L’E/S est disponible
Pile Zone pour stocker les variables temporaires: locales, paramètres de fonctions, ...
Tas Zone d’allocation dynamique
Données Zone pour stocker les variables globales et statiques
Code Zone pour stocker le code exécutable
Figure 2.4: Espace mémoire alloué à un processus
PCB du PID C.O PSW Etat Priorité Instant du début Temps @ @ @ ....
processus d’exécution du CPU Pile Code Tas
processus utilisé
Figure 2.5 : Informations typiques contenues dans l’entrée d’une table de processus
Sauvegarder le contexte de P1
P1
Dans certains systèmes, un processus peut créer un autre et devenir son père. On
obtiendra une hiérarchie de processus qui permet une coopération entre les processus
fils et les processus pères. Cette approche est utilisée dans le système UNIX (cf. Chapitre
4).
Plusieurs critères peuvent être utilisés pour évaluer la performance d’un algorithme
d’ordonnancement, on cite comme exemple :
5 Algorithmes d’ordonnancement
5.1 Ordonnancement FIFO (First In First Out)
C’est un algorithme simple à implémenter basé sur la stratégie «premier arrivé, premier
servi».
Algorithme SJF
Entrée : File d’attente des processus prêts FAPP, Temps d’exécution
des processus
Sortie : Processus sélectionné pour exécution
#Gestion de la FAPP
Si un nouveau processus arrive de l’état nouveau ou de l’état bloqué
Alors l’ajouter à la FAPP associé à son prochain cycle CPU
#Sélection du processus
Sélectionner le processus dont le prochain cycle CPU est minimal et
l’exécuter jusqu’à sa fin ou son passage à l’état bloqué.
Algorithme SRTF
Entrée : File d’attente des processus prêts FAPP, Temps d’exécution
des processus
Sortie : Processus sélectionné pour exécution
#Gestion de la FAPP
Si un nouveau processus arrive de l’état nouveau ou de l’état bloqué
ou de l’état Exécution (suspendu)
Alors l’ajouter à la FAPP associé au temps de son prochain cycle CPU
#Sélection du processus
Si La FAPP contient un processus dont le temps CPU demandé < temps
restant du processus en cours
Alors
Suspendre le processus en cours (le mettre à l’état Prêt)
supprimer de la FAPP le processus sélectionné et l’exécuter jusqu’à
sa fin, ou son passage à l’état bloqué, ou jusqu’à l’arrivée dans la
FAPP d’un nouveau processus dont le temps CPU demandé < temps
restant du processus en cours.
Priorités statiques
Les priorités assignées d’une façon statique peuvent générer le problème de «Famine» :
Un processus de faible priorité peut attendre infiniment à cause de la présence d’autres
processus toujours plus prioritaires.
Priorités dynamiques
Une solution commune au problème de famine consiste à assigner des priorités
dynamiques en se basant sur le principe de «vieillissement» : les priorités des processus
augmentent avec l’augmentation du temps d’attente. Un processus peu prioritaire aura
éventuellement sa priorité suffisamment élevée pour pouvoir être exécuté.
L’approche par priorité peut être préemptive ou non préemptive. Dans le cas non
préemptif, le processus le plus prioritaire est exécuté jusqu’à sa fin ou son passage à
l’état bloqué.
Si l’algorithme est préemptif, la priorité du processus en cours est comparée à celle des
processus nouvellement arrivés dans la FAPP. Si elle est inférieur, le processus en cours
est suspendu pour permettre l’exécution du nouveau processus.
Algorithme cyclique
Entrée : File d’attente des processus prêts FAPP, Q valeur du
Quantum
Sortie : Processus sélectionné pour exécution
#Gestion de la FAPP
Si un nouveau processus arrive de l’état nouveau ou de l’état
bloqué ou de l’état Exécution (fin de quantum)
Alors l’ajouter à la fin de la FAPP
#Sélection du processus
Suspendre le processus en cours (le mettre à l’état Prêt) s’il n’a
pas terminé son cycle CPU ;
Sélectionner le processus en tête de la FAPP et l’exécuter pendant
Q unités de temps au maximum.
La file d’attente des processus prêts est découpée en plusieurs files séparées, en se
basant sur certaines propriétés comme : le type du processus (système/utilisateur,
premier plan/ arrière plan, ....), la taille de la mémoire utilisée,.... etc. Chaque file possède
une priorité et son propre algorithme d’ordonnancement
Si on considère qu’on dispose de n files d’attentes Fi de priorités i (i = 1. . n) avec i = 1
la plus grande priorité, l’algorithme MLQ consiste à sélectionner un processus de la file
la plus prioritaire en appliquant l’algorithme associé à celle ci. Un processus d’une file Fi
de priorité i ne sera sélectionné pour exécution que si toutes les files plus prioritaires
soient vides. L’approche MLQ peut être préemptive ou non préemptive.
L’approche MLFQ est une version modifiée de la méthode MLQ qui autorise un
changement dynamique des priorités. Ceci permet aux processus de se déplacer entre
les files d’attente en fonction de l’évolution de leurs caractéristiques dans le système.
MLFQ utilise généralement les paramètres suivants :
Le nombre de file d’attentes
L’algorithme d’ordonnancement pour chaque file
La méthode utilisée pour choisir la file d’attente où un nouveau processus est inséré
La méthode utilisée pour déplacer un processus vers la file de priorité supérieure
La méthode utilisée pour déplacer un processus vers la file de priorité inférieure
MLFQ permet généralement de produire de bonnes performances pour les jobs courts
interactifs (Ceci est réalisé « théoriquement » dans SJF et SRTF) et aussi les jobs longs
ne seront pas pénalisés. Le schéma de la figure 2.7 montre un exemple où on utilise trois
files d’attente chacune gérée par la stratégie cyclique.
Bloqué
F1 CPU
Terminaison
Fin Quantum
ntum
Bloqué
F2 CPU
Terminaison
Fin Quantum
ntum
Bloqué
F3 CPU
Terminaison
Fin Quantum
ntum
Figure 2.7 : Schéma général de l’algorithme MLFQ
L’exemple suivant montre un cas possible pour les choix des paramètres :
Nombre de files d’attentes: Les processus prêts sont rangés dans 𝑛 files:
𝐹1, 𝐹2, . . . , 𝐹𝑛.
La méthode utilisée pour choisir la file d’attente où un nouveau processus est
inséré : Un nouveau processus est inséré à la fin de la file la plus prioritaire 𝐹1
L’algorithme d’ordonnancement pour chaque file 𝑭𝒊 : Cyclique avec un quantum de
temps Qi tel que Qi < Qi+1 (Qi+1 = 2Qi )
La méthode utilisée pour déplacer un processus vers la file de priorité
supérieure : Un processus qui se bloque pour une E/S sera placé dans la file supérieure
où il sera plus prioritaire
La méthode utilisée pour déplacer un processus vers la file de priorité inférieure :
Si un processus pris dans la file Fi ne s'est pas terminé à la fin du quantum, sa priorité
est réduite. Il sera placé dans la file Fi+1 (sauf pour Fn où il y restera jusqu’à sa
terminaison)
L’algorithme MLFQ est utilisé dans plusieurs systèmes comme Unix, Windows et Solaris.
C’est un des algorithmes les plus intéressants en se basant sur le principe «Apprendre
du passé pour prédire le futur» : Au lieu d’exiger une connaissance préalable sur le
processus -comme dans le cas de SJF et SRTF-, la décision de l’ordonnancement des
processus est faite selon l’évolution de leurs caractéristiques dans le système. Ceci va
offrir de bonnes performances aux processus courts interactifs puisque tout blocage
pour une E/S va être suivi d’une augmentation dans la priorité. D’autres part, les
processus dont le besoin en temps CPU est élevé ne seront pas pénalisés. Néanmoins, ces
derniers peuvent souffrir du problème de « famine » en présence d’un grand nombre de
processus courts interactifs.
On prend l’exemple du système Unix 4.3 BSD dont l’ordonnancement est basé sur les
principes suivants :
– Valeurs des priorités: [0 − 127] (avec 0 la priorité maximale), les valeurs [0 − 49]
pour les processus noyau et les valeurs [50 − 127] pour les processus utilisateur
– Les processus de même priorités sont ordonnancés par l’algorithme cyclique
– La priorité de chaque processus prêt en mémoire est recalculée périodiquement
(chaque seconde). Les processus sont alors replacés dans la file qui correspond à la
nouvelle priorité : 𝑃𝑟𝑖𝑜𝑟𝑖𝑡é = 𝑏𝑎𝑠𝑒 + 𝑇⁄2 avec 𝑏𝑎𝑠𝑒 : la priorité de base attribuée
par le S.E. aux processus utilisateur (la même valeur), 𝑇 : Nombre de tops
d’horloges pendant lequel le processus a utilisé le CPU récemment. A chaque
pulsation d’horloge, le compteur de la valeur 𝑇 est incrémenté par 1 pour le
processus en exécution. Chaque seconde, avant de recalculer 𝑃, la valeur 𝑇 est
divisée par 2 afin de ne pas pénaliser les processus ayant utilisé le CPU «pour
longtemps». De cette façon, l’influence du temps CPU utilisé par un processus
diminue à mesure que le processus attend le CPU.
L’objectif est de donner plus de priorités aux processus qui n’on pas beaucoup utilisé le
CPU dans un passé récent. Cette formule donne des priorités supérieures aux processus
ayant utilisé moins de temps CPU dans le passé récent. Par exemple : priorité (éditeur
de texte comme VI) > priorité (processus de calcul) car l’éditeur consomme plus de
temps E/S par rapport au temps CPU.
On prend l’exemple de Windows NT, 2000, XP. Ce système utilise une approche basée
sur MLFQ avec 32 niveaux de priorités. Les threads (processus) de même priorité sont
dans une même file et ordonnancés par l’algorithme round robin.
– Les processus (thread) Temps réel (opérations critiques) ont des priorités fixes
[16-31].
– Les threads Utilisateur ont des priorités dynamiques [1-15] : Le S.E attribut une
valeur de priorité initiale à un thread. Cette valeur peut être temporairement
augmenté durant la durée de vie du thread. Le changement de la priorité engendre
le changement de la file dans la même classe seulement (même le niveau 15). Si un
thread est interrompu pour une E/S, le noyau Windows augmente sa priorité. Si un
thread est interrompu car il a épuisé son quantum, le noyau diminue sa priorité.
Ainsi, les threads qui consomment plus de temps CPU auront des priorités
inférieures et les threads ayant plus de temps E/S ont tendance à avoir des priorités
plus élevées. Dans le cas des threads dominés par des E/S, le noyau augmente la
priorité plus pour les attentes interactives (attente clavier ou affichage) que pour
d'autres types d'E/S (E/S du disque) (augmenter la réactivité des applications
interactives).