Télécharger ici

CHAP3. Notions sur les Processus_ Gestion du processeur central
3.1. Notion de Processus séquentiel.
Les exécutions des instructions d'un programme doivent respecter un certain ordre de précédence. On peut représenter l’éxécution d’un programme
à l’aide d’un graphe de précédence .
Exemple: Soit un programme qui lit 2 variables aetb à partir d'un même fichier , puis calcule la somme de ces 2 variables et imprime ces 2
variables et leur somme sur la même imprimante.
..
1. lire a
2. écrire a
3. lire b
4. écrire b
5. calculer c=a + b
6. écrire c
L'exécution de ce programme peut être faite de plusieurs manières.
Exécution a): il < i2 < i3 < i4 < i5 < i6
Exécution b) : il < {il \ | i3) < (i5 | | i4) < i6
(< : avant; | | : en parallèle)
3.1.1 Définition d'un processus séquentiel
Dans l'exécution (a) les instructions ont été exécutées dans un ordre séquentiel strict; on appellera cette exécution séquentielle un
processus séquentiel (ou processus). L'exécution (b) ne correspond pas à un processus séquentiel car certaines instructions telles
que i2 et i3 peuvent se dérouler en parallèle (ou simultanément); on peut décomposer cette exécution en 2 processus séquentiels
concurrents: FI : il < i3 < i5 ; P2 : i2 < i4 < i6.
Différence entre programme et processus
De manière informelle, un processus est l'exécution séquentielle d'un programme. On peut dire qu'un processus est une
représentation abstraite de l'exécution d'un programme. Un processus est une entité dynamique représentant l'exécution
séquentielle d'un programme sur le processeur; l'état d'un processus évolue au cours de l'exécution de son programme. Alors qu'un
programme est une entité statique qui peut donner naissance à un ou plusieurs processus.
Exemple «non informatique»
Programme
Données
Processeur
Processus
Processus de Préparation d'un gâteau
(Tanenbaum 1994)
Recette pour préparer le gateau
Ingrédients utilisés : farine, beurre, sucre, amandes,...
Patissier
Actions de préparation du gâteau ou exécution des différentes étapes
de la recette
3.1.2 Bloc de contrôle d'un processus (PCB).
Tout processus introduit dans un système est recensé par un descripteur de processus PCB (Process Control Block) structure
représentative donnant toutes les informations nécessaires au contrôle et au suivi du processus par le système .
Les informations contenues dans un PCB peuvent être regroupées en deux classes:
_Informations nécessaires à l'exécution du processus (contexte).
_Informations nécessaires à la gestion du processus.
1. Contexte d'un processus
On appelle contexte d'un processus le sous-ensemble de la machine que les actions (instructions) du processus peuvent modifier
ou consulter. Il est défini par : le contexte du processeur : registres internes (mot d'état) et registres adressables, L'espace mémoire
utilisé par le programme et les données du processus, la Pile d'exécution.
Le contexte d'un processus est l'ensemble des données qui permettent de reprendre l'exécution d'un processus qui a été interrompu
(c'est à dire les informations sauvegardées à chaque changement d'état du processus ou commutation).
2. Informations de gestion
Ces informations permettent l'identification et la gestion des processus; on peut trouver:
• Identificateur du processus : identificateur attribué par le système (noyau).
Tout processus est identifié par un identificateur unique (non modifiable) qui lui est propre et qui le caractérise. L'identificateur
permet de distinguer tout processus de façon non ambiguë.
•
Nom symbolique (facultatif) : nom attribué par l'utilisateur,
•
Priorité,
•
Etat du processus,
•
Quantum ou temps maxi cpu restant à consommer
•
Pointeurs sur pcb des processus parents (père , fils,…)
•
Informations sur l’état des Entrées/Sorties :
•
Pointeur sur table des descripteurs des Fichiers ouverts,
•
Entrées/sorties en cours,…
•
Informations de comptabilité (temps CPU consommé, temps d’attente, nombre d'entrées/sorties effectuées, ...)
3.1.3 Etats d'un processus
Durant son existence, un processus passe à travers une suite d'états; les principaux états d'un processus sont les suivants:
1°) Etat Created (Créé): dés qu'un processus est lancé par un utilisateur il commence sa vie par cet état. A ce niveau le système
examine la disponibilité de toutes les ressources nécessaires pour démarrer l'éxécution du processus. Il ne pourra être éxécuté que
si toutes ces ressources peuvent lui être allouées.
2°) Etat Ready (Prêt): c'est l'état correspondant au fait qu'il ne manque au processus qu'un processeur pour s'éxécuter (attente du
ou d'un processeur).
3°) Etat Running (Actif ) : ici le processus dispose de toutes les ressources ( y compris un processeur) et s'éxécute.
4°) Etat Waiting (Bloqué) : le processus attend au moins une ressource autre qu'un processeur.
5°) Etat Complete (Terminé): le processus a terminé son traitement et toutes les ressources qu'il détenait doivent être récupérées
par le système.
1 : création du processus ; 2 : Préallocation Mémoire (ressources préliminaires sauf processeur) ; 3 : Election Ordonnanceur ;
4 : Réquisition ; 5 : Blocage ; 6 :Réveil (priorité processus réveillé <= priorité processus actif) ; 7 :Réveil (priorité processus
réveillé > priorité processus actif) ; 8 : fin du processus ; 9 : Destruction du processus
3.1.4 Notion de Travail
Un utilisateur soumet son problème à résoudre sous forme d'un travail ou job.
Un travail est un ensemble d'activités définies pour résoudre un problème. Un travail se décompose en un ensemble d'unités
appellées étapes ou steps qui s'éxécutent en général en série.
Chaque étape est un programme éxécutable pouvant se décomposer en un ou plusieurs processus coopérants. Un travail , une fois
accepté par le système est transformé en un ensemble de processus au niveau de chaque étape.
JOB = Step1 ------->processus: PS11 PS12 ..........PS1k
Step2 ------->processus: PS21 PS22 ..........PS1k
.......
Stepn ------->processus: PSn1 PSn2 ..........PSnk
Exemple:
Step1= Compilation d'un programme source nom.p en PASCAL = processus éxécution du compilateur PASCAL avec comme
entrée le programme source nom.p et génération d'un fichier objet nom.obj en sortie;
Step2= Edition de liens = processus éxécution de l'éditeur de liens avec comme entrée le fichier objet nom.obj généré par le Step1
et génération d'un fichier éxécutable nom.exe en sortie;
Step3= Chargement et éxécution de nom.exe = processus éxécution de nom.exe
3.1.5 Cheminement des travaux et des processus dans le système
Sachant que le système est un ensemble de programmes de gestion de ressources, un problème reste posé:
1°) Quelle est la relation entre ces programmes ?
2°) A quel moment de la vie (période d'existence) d'un travail et d'un processus , chacun de ces programmes entre -t- il en jeu ?
Pour expliquer ces relations internes et le séquencement de gestion de ressources, il faut étudier la relation entre la vie d'un travail et celle
des processus correspondants.
Etats d'un travail:
Tout travail introduit dans un système est recensé par un descripteur de job JCB (Job Control Block) structure représentative donnant
toutes les informations nécessaires à la gestion du job. Un travail va passer par une succession d'états :
1°) Etat Submit (soumis en entrée): dés qu'un travail est lancé par un utilisateur il commence sa vie par cet état. Ici ,un module Reader
(lecteur de travaux) introduit les travaux sur disque et crée un fichier de controle (pour spool) associé à chaque travail. A ce niveau le
système analyse les commandes demandées par le job sous forme d'un langage réservé à cet effet (Job control language ou encore appelé
Shell).
2°) Etat Hold (maintenu en file d'attente): si les commandes formulées par le job sont correctes, le job est converti en une forme interne
compréhensible par les autres modules du système.
A ce niveau le job est placé dans les files d'attente appropriées du régulateur (ordonnanceur) de travaux (job scheduler).
3°) Etat Running (actif ) : après l'état Hold , dès que la politique du job scheduler le permet et que les ressources préliminaires minimales
demandées par le job peuvent lui être allouées, le job passe à l'état actif. A ce niveau le Gestionnaire des étapes (Step Manager) traduit
chaque étape du job actif en processus . Il introduit ces processus dans la chaîne de micro-régulation et attend la fin de tous les processus
composant une étape pour enchaîner sur l'étape suivante du job.
4°) Etat Out (en sortie ) : Dès qu'un job termine son éxécution , son fichier de controle (image disque de son listing) est mis en file de sortie.
A ce niveau , un module Writer est chargé de la sortie sur imprimante de tous les fichiers de controle qui lui sont soumis.
Le schéma suivant montre la relation entre les états d’un travail et les états des processus correspondants :
3.1.6 Transitions d'un processus d'un état à un autre
Le changement d'état d'un processus évolue au cours du temps et peut être provoqué pour diverses raisons: Attente d'un
événement, manque de ressources, arrivé d'un événement attendu, disponibilité de ressources manquantes, arrivé ou réveil d'un
processus plus prioritaire, exécution de certaines opérations (entrées/sorties, fin d'exécution du processus...).
Les différentes transitions d'un processus sont représentées à l'aide du schéma ci-dessous.
(1) :
Création de processus;
(2) :
L'ordonnanceur choisit un processus de la file des processus prêts selon une politique d'ordonnancement (le processus est
élu).
(3) :
Le processus a consommé le quantum de temps qui lui a été attribué par l'ordonnanceur (ou un processus plus prioritaire
est arrivé); il revient dans la file des processus prêts : c'est une réquisition ou préemption; La fin du quantum est signalée à l'aide
d'une interruption horloge. L'ordonnanceur affecte le processeur à un autre processus : transition (2).
(4) :
Le processus ne peut plus progresser, il se met en attente d'une ressource (physique ou logique) ou d'un événement pour
pouvoir continuer son exécution. L'ordonnanceur affecte le processeur à un autre processus : transition (2).
(5) :
Libération d'une ressource ou arrivé d'un événement attendu: le processus réveillé passe à l'état prêt.
(6) :
Fin d'exécution du programme d'un processus (terminaison) ou erreur dans l'exécution du programme. L'ordonnanceur
affecte le processeur à un autre processus: Transition (2).
(7) :
Destruction du processus par un autre processus (le processus parent ou un processus système).
3.1.7 Structures de données correspondant aux différents états
Ces états sont représentés dans le système à l'aide de structures de donnés, en général des files ; ces structures de données
contiennent des identificateurs de processus ou des pointeurs vers les blocs de control de processus (PCB).
L'état prêt peut être représenté par une ou plusieurs files : une file par classe de processus (processus système, processus temps
réel, processus temps partagé) ou une file par priorité.
L'état bloqué on peut trouver une file par événement, signal ou ressource attendu (file r processus en attente de l'imprimante, file
des processus en attente de fin d'E/S sur le disque,...).
L'état actif : un vecteur composé de un ou plusieurs éléments (machine monoprocesseur ou multiprocesseurs) contient les
identificateurs des processus actifs ou des pointeurs vers les descripteurs des processus actifs.
3.2 Opérations sur les processus
Pour le système un processus est un objet, identifié par un identificateur unique et sur lequel on peut appliquer certaines
opérations telles que:
• Création,
•
Destruction,
•
Blocage,
•
Réveil,
•
Activation (par le dispatcher),
•
Désactivation (en fin de quantum),
•
Suspension.
Re la nc e.
Un noyau de système est composé de l'ensemble des ces opérations.
3.2.1 Création d'un processus
•
Cette opération consiste à :
Allouer un descripteur au processus (PCB),
Affecter un identificateur unique au processus,
Initialiser le descripteur (PCB) :
- Programme à exécuter,
- Pile d'exécution,
- Mémoire centrale utilisée par le programme et les données du processus,
- Etat du processus,
- Priorité du processus,
- Autres ressources,...
Propriétés de la fonction « création » de processus :
La création des processus est en général dynamique:
Les processus sont créés à la demande. Dans ce cas un processus peut créer ou détruire un autre processus. Le problème qui se pose
alors est le risque de création d'un nombre illimité de processus. En réalité le nombre de créations de processus est limité par le
système : un plafond Pmax qui est le nombre maximum de processus existant simultanément dans le système est imposé aux
utilisateurs (Pmax est un paramètre modifiable du noyau) .
Le processus créé par un autre processus est appelé processus "Fils" et le processus créateur est appelé processus "Père". On établit
généralement une hiérarchie entre les processus selon les règles suivantes:
Régle 1: Un processus peut avoir plusieurs fils
Régle 2: Un processus ne peut avoir qu'un seul père .
Ceci engendre une structure arborescente entre chaque processus et ses fils:
En général à tout programme executable lancé , correspond un seul processus , qui , à son tour peut créer d’autres processus
dynamiquement.
3.2.2 Destruction de processus
La destruction d'un processus ne peut être effectuée que par le processus père ou un processus système. Cette opération consiste à:
• Libérer les ressources occupées par le processus,
• Détruire éventuellement toute la descendance du processus ; ce choix dépend du système :
_dans les systèmes de la famille Multics la destruction de la descendance est réalisée automatiquement par le noyau.
_dans les systèmes de la famille Unix quand un processus se termine ses fils (ou sa descendance) ne sont pas détruits.
• Libérer son descripteur (PCB).
Remarque : Le descripteur d'un processus (PCB) peut être réutilisé, après sa libération. Par contre, l'identificateur d'un processus
ne peut pas l'être.
3.2.3 Organisation générale du Noyau
L'éxécution des programmes du noyau est déclenchée de deux façons:
1)Par l'appel d'une fonction (primitive) de gestion des processus (création, destruction, synchronisation,...).
En général ces primitives sont réalisées sous la forme d'appel superviseur pour des raisons de protection.
2)Par une IT , car les programmes de traitement des IT font partie du noyau qui réalise ainsi la traduction de ces IT en opérations
de synchronisation. Ces IT sont ainsi invisibles aux niveaux supérieurs.
Dans tous les cas le mécanisme d'entrée dans le noyau comporte donc une sauvegarde automatique du mot d'état et éventuellement
des registres du processeur qui éxécute l'appel superviseur ou qui traite l'IT. Ces informations sont sauvegardés soit dans un
emplacement fixe (ancienne technique) , soit dans une pile (nouvelle technique).
3.3 L'ORDONNANCEMENT DES PROCESSUS
C'est un ensemble de règles définissant l'ordre d'exécution des processus en tenant compte de la disponibilité des ressources
(processeurs) nécessaires, 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. Les principaux objectifs
assignés à un ordonnanceur sont:
Occupation maximale du processeur,
S'assurer que chaque processus en attente d'exécution reçoive sa part de temps processeur.
Minimiser le temps de réponse pour les utilisateurs en mode interactif,
Satisfaire le maximum de processus des utilisateurs en respectant certaines contraintes telles la priorité, l'échéance (dans les
systèmes temps réel), etc…
Ces objectifs sont parfois complémentaires, parfois contradictoires : augmenter la performance par rapport à l’un d’entre eux peut
se faire au détriment d’un autre. Il est impossible de créer un algorithme qui optimise tous les critères de façon simultanée.
On distingue deux principaux types d'ordonnanceurs :
3.3.1 Ordonnanceur des travaux
Ce type d'ordonnanceurs est utilisé dans les systèmes de traitement par lot ( mode Batch , appelé mode BackGround sur Unix).
Les travaux sont soumis à travers un périphérique d’entrée (bande magnétique, lecteur de cartes, ...) et stockés en mémoire
secondaire. Ces travaux sont ensuite initialisés et rangés dans une file des « travaux en entrée ». L'ordonnanceur des travaux
choisit un travail (job) de la file et le charge en mémoire centrale. Le processus correspondant à ce travail est rangé dans la file des
« processus prêts ».
Dans les systèmes interactifs tels que les systèmes en temps partagé, les systèmes transactionnels et les systèmes en temps réel
l'activité de l'ordonnanceur des travaux est très réduite voire inexistante.
3.3.2 Ordonnanceur des processus
Son rôle consiste à choisir un processus, de la file des processus prêts, selon une stratégie d'ordonnancement et lui affecter le
processeur.
La commutation de processus (commutation des contextes des processus) est réalisée par un programme appelé commutateur de
processus (dispatcher); cette opération consiste à:
Restaurer le contexte du processus choisi.
Changer son état (de l'état prêt il passe à l'état actif ou élu).
Restaurer le contexte du processus élu.
Quand l'ordonnanceur est-il sollicité par le système ?
• Lorsque le processus actif se termine ;
• Lorsque le processus actif se bloque (par manque de ressource physique ou logique): cela suppose que d'autres processus sont
susceptibles d'être activés et donc sont présents en mémoire (ou file des processus à l'état prêt non vide);
• Lors d'une interruption d'horloge à la fin d'un quantum de temps : système en temps partagé.
• L'arrivée ou le réveil d'un processus plus prioritaire.
Schéma synoptique général de l’ordonnancement des processus
3.3.3 Structures de données nécessaires pour la gestion des files d’attente des processus
On associe généralement une file à chaque cause distincte de blocage pour regrouper les processus bloqués. De même, les
processus à l'état prêt sont généralement maintenus dans une file dont la gestion permet de mettre en oeuvre une politique
d'allocation des processeurs physiques.
Si on suppose que le prochain processus à élire est toujours le premier de la file des processus prêts, la politique d'allocation des
processeurs physiques sera définie par deux algorithmes:
1)algorithme d'entrée dans la file des processus prêts
2)algorithme qui détermine la réquisition des processeurs physiques.
L'ensemble des programmes réalisant ces algorithmes est appelé ordonnanceur ou process scheduler (régulateur de processus).
Le programme qui réalise l'élection proprement dite (choix du processeur, gestion des contextes de commutation) est appelé
distributeur ou dispatcher.
Schéma synoptique d’ordonnancement à 2 niveaux : Scheduler/Dispatcher
3.3.4 Critères de performance des algorithmes d'ordonnancement
Il existe plusieurs algorithmes d'ordonnancement, chacun d'eux a des propriétés spécifiques qui peuvent favoriser une classe de
processus par rapport à une autre. Pour le choix d'un algorithme à utiliser dans une situation particulière on doit tenir compte des
différentes propriétés de l'algorithme. Les principaux critères de performances sont:
1) Utilisation du processeur central (CPU):
a)Le taux d'utilisation du processeur central est défini par le rapport temps CPU consommé/ temps de séjour des processus . Le
taux d'utilisation du processeur doit être le plus élevé possible.
b)L’OverHead de gestion du CPU:
Soit Tc le temps de commutation de contextes, et soit Q
(quantum) la tranche de temps allouée à chaque processus avant de lui retirer le processeur , on appelle
Overhead Cpu le rapport Tc/Q : ce paramètre mesure la proportion de temps perdue par la gestion du Cpu par rapport au temps
d’allocation du CPU (paramètre d’efficacité de gestion du CPU ). L’OverHead Cpu doit être le plus faible possible.
2) Temps de résidence (turn around time ou temps de séjour: C'est le temps passé par le processus dans le système. C'est la somme
du temps d'exécution et du temps passé dans les différentes files (file des processus prêts, files des processus bloqués). Soient te:
le temps (ou date) d'entrée processus dans le système et ts: le temps (ou date) de sortie du processus.
Temps de résidence = ts - te
3)Temps d'attente (waiting time): C'est le temps passé dans la file des processus prêts; c'est-à-dire le temps total d’attente du
processeur central (cpu).
Remarque : ne pas confondre avec le temps passé dans l'état bloqué (par exemple temps d'attente des entrées/sorties ou temps
d'attente d’une ressource autre que le cpu,...).
4)Temps de réponse: Le temps de résidence n'est pas significatif pour les programmes interactifs, donc on utilise un autre critère
de performance qui est le temps de réponse. C'est le temps qui sépare le moment où le processus soumet une requête et le début de
la réponse à cette requête ; on ne tient pas compte de la durée de la réponse : le processus peut commencer à envoyer des réponses
à l'utilisateur avant qu'il soit terminé.
Soient : te: le temps (ou date) de soumission de la requête et ts: le temps (ou date) de début de la réponse à cette requête.
Temps de réponse = ts – te
Différentes stratégies d'ordonnancement
On peut classer les politiques ou stratégies d'ordonnancement en deux classes:
a)Non-préemptif (Sans réquisition) : L'exécution du processus en cours ne peut jamais être interrompue au profit d'un autre processus. Ce
sont les algorithmes utilisés dans les premiers systèmes BATCH.
b)Préemptif (Avec réquisition) : L'exécution du processus en cours peut être interrompue au profit d'un autre processus plus prioritaire (ou
plus urgent) ou de même priorité (voir algorithme du tourniquet sans priorité). Ce type d'algorithmes favorise les processus courts et
assure, dans les systèmes interactifs, un temps de réponse assez bref.
3.3.5 Algorithmes non-préemptifs (sans réquisition)
1 )Premier arrivé premier servi (FCFS ou FIFO)
C'est un algorithme sans réquisition qui consiste à allouer le processeur au premier processus de la file des processus prêts.
Processus
Temps estimé
Temps d'attente
Temps de résidence
1
2
3
4
30
12
2
16
0
30
42
44
30
42
44
60
Diagramme de Gantt
Diagramme de Gantt
Inconvénient: Les travaux courts risquent d'attendre longtemps s'ils sont après des travaux longs.
2) Le plus court d'abord ( SJF: Shortest Job First)
Si l'ordonnanceur fonctionne selon la stratégie SJF, il choisit, parmi le lot de processus à exécuter, le plus court (plus petit temps
d'exécution). Cette stratégie est bien adaptée au traitement par lots (Batch) de processus dont les temps maximaux d'exécution
sont connus ou (estimés) fixés par les utilisateurs car elle offre un meilleur temps moyen de séjour.
Considérons par exemple un lot de quatre processus dont les temps respectifs d'exécution sont a,b,c, et d . Le premier processus se
termine au bout du temps a ; le deuxième processus se termine au bout du temps a+b ; le troisième processus se termine au bout
du temps a+b+c ; le quatrième processus se termine au bout du temps a+b+c+d . Le temps moyen de séjour est :
Tms = (4 a + 3 b + 2 c + d)/ 4
.
On obtient un meilleur temps de séjour pour a<b<c<d .
Toutefois, l'ordonnancement du plus court d'abord n’est optimal que si les travaux (processus) sont disponibles
simultanément.
Le processeur est alloué au travail le plus court (temps processeur demandé); la priorité d'un processus est inversement proportionnelle au temps
processeur demandé :
Priorité = F(
1 / (temps CPU demandé) )
Processus
1
2
3
4
Temps estimé
30
12
2
16
Temps d'attente
30
2
0
14
Temps de résidence
60
14
2
30
SJF est un cas particulier des algorithmes avec priorité.
Inconvénient : risque de privation (attente infinie) pour les travaux longs , surtout si un flot continu de travaux courts arrive indéfiniment.
Diagramme de Gantt
Diagramme de Gantt
3.3.6 Algorithmes préemptifs (avec réquisition)
Dans les algorithmes d'ordonnancement précédents, quand le processeur est alloué à un processus il le garde jusqu'à la fin de son exécution
ou bien jusqu'à ce qu'il lance une opération d'entrées/sorties ou il se bloque volontairement en attente d'une ressource ou d'un événement.
Dans les algorithmes préemptifs, le processeur peut être retiré à un processus avant la fin de son exécution et affecté à un autre processus.
Le processus choisi peut être plus prioritaire ou de priorité quelconque dans le cas où le processeur serait alloué par quantum de
temps (algorithme du tourniquet avec processus de même priorité).
1) Le Tourniquet (Round-robin) ou Ordonnancement circulaire
Cet algorithme est très utilisé dans les systèmes en temps partagé. Le temps est divisé en tranche de temps appelée quantum de
temps ou 'time slice'. 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 (premier processus de la file) à la fin du quantum ou si le processus actif se bloque.
Choix de la valeur du quantum :
Les performances de cet algorithme dépendent du quantum de temps(Q):
_Un quantum trop petit provoque trop de commutations de processus et abaisse l'efficacité du processeur : les processus
progressent trop lentement .
_Un quantum trop élevé augmente le temps de réponse des courtes commandes en mode interactif .
Si Q est très grand (tend vers l'infini) alors cet algorithme est équivalent à l'algorithme FIFO (avec un overhead tendant vers 0)
Si Q est très petit (tend vers 0) alors il y a une mauvaise utilisation du processeur avec un overhead tendant vers 100 % .
On doit tenir compte du temps de commutation des contextes (0.1 à 0.5 ms) pour le choix du quantum de temps (10 à 50 ms : le
quantum du système windows98 est égal à 20 ms). Actuellement on estime qu’un quantum entre 20 et 50 ms est souvent un
compromis raisonnable.
Exemple:
Un quantum = 2 unités de
temps
Processus Temps estimé
nbre de quanta
Temps d'attente
1
2
3
4
10
4
1
5
10q
8q
2q
10q
20
8
2
10
20u
16u
4u
20u
Diagramme de Gantt
Temps de
Résidence
40
24
14
30
Diagramme de Gantt
2) Ordonnancement du plus petit temps de séjour SRT
L'ordonnancement du plus petit temps de séjour ou Shortest RemainingTime est la version préemptive de l'algorithme SJF. A
chaque fois qu’un nouveau processus arrive dans la file des processus prêts, l'ordonnanceur compare la valeur espérée (estimée)
du temps CPU à consommer pour ce processus avec la valeur du processus actuellement en exécution. Si le temps du nouveau
processus est plus petit, l’ordonnanceur retire le processeur au processus actif en le ramenant à l’état prêt et active immédiatement
le nouveau processus.
Comment appliquer cette technique aux processus interactifs ?
Chaque processus interactif se comporte comme suit : il attend une commande, l'exécute, attend la commande suivante, et ainsi
de suite. Alors parmi les processus prêts, le processus élu sera celui dont la commande à exécuter est la plus courte en temps. Le
temps d'exécution de la prochaine commande de chaque processus est estimé en se basant sur le comportement passé du processus
: Si T0 est le temps d'exécution estimé pour la première commande et Ti , le temps d'exécution mesuré pour la iieme commande, les
estimations successives sont :
T0 pour la première ;
T0/2 + T1 /2 pour la seconde ;
T0/4 + T1/4 + T2 /2 pour la troisième ;
T0/8+T1/8+T2/4 +T3/2 ,...
3) Algorithmes d'ordonnancement avec priorité
La priorité: c'est une valeur numérique associée à un processus et permettant de classer les différents processus selon leur
importance. Ces priorités peuvent être statiques (si elles sont fixées à la création des processus et ne sont pas modifiées par le
système) ou dynamiques (si elles sont mises à jour périodiquement par le système). Ainsi, typiquement, dans un système temps
réel, les priorités sont fixes et reflètent le caractère critique des tâches. Dans les systèmes orientés sur le partage du temps, les
priorités sont dynamiques et modifiées par le système pour atteindre certains de ses objectifs. Par exemple, pour favoriser les
processus qui font beaucoup d'entrées/sorties et consomment, donc, très peu de temps du processeur, on doit augmenter
dynamiquement leur priorité. On peut, également, diminuer la priorité des processus qui consomment beaucoup de temps
processeur (ce qui favorisera les autres processus).
Processus
1
2
3
4
Temps estimé
30
12
2
16
Priorité
1
5
1
4
Temps d'attente
28
0
58
12
Temps de résidence
58
12
60
28
Diagramme de Gantt
1.
Diagramme de Gantt
La priorité peut être utilisée avec d'autres algorithmes d'ordonnancement.
L'algorithme round robin permet une répartition équitable du processeur. Cependant il n'est pas intéressant si certains processus
sont plus importants ou urgents que d'autres. L'ordonnanceur à priorité attribue à chaque processus une priorité. Le choix du
processus à élire dépend des priorités des processus prêts. Les processus de même priorité sont regroupés dans une file du type
FIFO. Il y a autant de files qu'il y a de niveaux de priorité. L'ordonnanceur choisit le processus le plus prioritaire qui se trouve en
tête de file. En général, les processus de même priorité sont ordonnancés selon l'algorithme du tourniquet.
Attribution et évolution des priorités
Pour empêcher les processus de priorité élevée de s'exécuter indéfiniment, l'ordonnanceur diminue régulièrement la priorité du
processus en cours d'exécution.
La priorité du processus en cours est comparée régulièrement à celle du processus prêt le plus prioritaire (en tête de file).
Lorsqu'elle devient inférieure, la commutation a lieu. Dans ce cas, le processus suspendu est inséré dans la file correspondant à sa
nouvelle priorité. L'attribution et l'évolution des priorités dépendent des objectifs fixés et de beaucoup de paramètres.
Exemple : Les processus qui font beaucoup d'E/S (qui sont souvent en attente) doivent acquérir le processeur dès qu'ils le
demandent, afin de leur permettre de lancer leur requête suivante d'E/S. Lorsqu'un processus passe de l'état élu à l'état bloqué, sa
priorité est recalculée. Sa nouvelle valeur est le rapport : quantum/temps réellement utilisé par le processus.
Les processus qui ont le plus grand rapport sont les plus prioritaires :
. Si le quantum = 100 ms et le temps utilisé = 2 ms, la nouvelle priorité est 50.
. Si le quantum = 100 ms et le temps utilisé = 50 ms, la nouvelle priorité est 2.
3.3.7 Ordonnancement avec files multiniveaux
On définit des classes de processus et on associe à chacune des classes une priorité et une stratégie d'ordonnancement.
Le processeur est alloué aux processus de la classe la plus prioritaire. On ne change de file que si la file la plus prioritaire est vide. Un
processus ne peut pas changer de classe.
Exemple: Système Unix de SUN
Dans le système Unix de SUN, il y a 3 classes de processus:
• Processus en temps réel,
• Processus système,
• Processus en temps partagés.
• Les processus en temps réel sont plus prioritaires que les processus systèmes qui sont plus prioritaires que les processus en temps
partagé.
Les files multiniveaux avec recyclage
Dans la technique précédente les processus ne pouvaient pas changer de file. Un processus d'une classe A reste dans la file de cette classe
jusqu'à ce qu'il quitte le système. Dans cette stratégie, on dispose de n files de 'processus prêts': fo, fi, ii,..., fn-i. A chaque file fi est associé
un quantum de temps qi dont la valeur croit avec le rang de la file. Un processus de la file fi n'est servi que si les files de rang inférieur à i
sont vides. Lorsqu'un processus de la file fi a épuisé son quantum de temps sans avoir terminé son exécution, il rentre dans la file fi+i. Les
processus de la dernière file (fn-i) sont recyclés dans la même file. Les nouveaux processus sont rangés dans la file fo. Cet algorithme
favorise les processus courts.
Remarque: Une autre variante de cet algorithme applique FCFS à la dernière file (f n-i).
Exemple d’application de cette technique :
Pour éviter qu'il y ait beaucoup de commutations pour les processus consommateurs de temps CPU, il est préférable d'allouer un
plus grand quantum à ces processus. Lorsqu'un processus passe à l'état élu : Pour la première fois, le processeur lui est alloué
pendant un quantum. Pour la seconde fois, le processeur lui est alloué pendant 2 quantum... Pour la Niéme fois, le processeur lui
est alloué pendant ( 2 puissance (N-1)) quantums .
Chaque processus a une priorité. Cette dernière dépend du nombre de quantum qui lui sera alloué lors de sa prochaine activation.
Les processus dont le nombre de quantum est le plus petit sont les plus prioritaires. Les processus prêts sont répartis selon leur
priorité dans des files (FIFO).
D'abord on fait l'élection du processus le plus prioritaire qui se trouve en tête de file. Lorsque l'exécution d'un processus est
suspendue pour la Nième fois, sa priorité est recalculée 2 puissance (N) puis il est inséré à la queue de la file appropriée.
Exemple : Considérons un processus qui doit effectuer des calculs pendant 100 quantum. Ce processus obtient successivement 1,
2, 4, 8, 16, 32 et 64 quantum. Mais il utilisera 37 des 64 derniers quantum. Le nombre de changements de contexte passe de 100
(cas du tourniquet) à 7. Le processeur passe moins de temps à commuter et a donc un meilleur temps de réponse. Surtout dans le
cas où la commutation nécessite des transferts sur disque.
Un processus qui descend de plus en plus dans les files à priorité s'exécute de moins en moins fréquemment et favorise ainsi les
processus courts en mode interactif. Pour ne pas défavoriser un processus qui s'était exécuté pendant assez longtemps avant de
devenir interactif, on peut lui attribuer la plus haute priorité dès qu'un retour chariot est tapé sur le terminal associé au processus
(les premières versions d'Unix utilisaient cette solution).
Ordonnancement à deux niveaux
Cet ordonnanceur se décompose en deux fonctions complémentaires : ordonnanceur haut niveau qui déplace les processus entre le
disque et la mémoire (mécanisme de SWAP ) , et ordonnanceur bas niveau qui alloue/retire le processeur aux processus résidant
en mémoire.
Lors d'une commutation, si le processus élu n'est pas en mémoire (swappé sur disque), il faut le charger en mémoire. Le temps de
commutation est alors deux à trois fois plus élevé que celui des processus qui se trouvent en mémoire centrale.
Pour éviter ces va-et-vient entre le disque et la mémoire lors d'une commutation, l'ordonnanceur à deux niveaux déplace les
processus entre le disque et la mémoire (haut niveau) et choisit le processus à exécuter parmi ceux qui sont en mémoire (bas
niveau). Périodiquement, l'ordonnanceur de haut niveau retire de la mémoire les processus qui y sont restés assez
longtemps (Swap Out ) et les remplace par des processus qui sont restés sur le disque pendant trop de temps (Swap In).
Pour élire un processus, l'ordonnanceur de bas niveau se restreint aux processus en mémoire.