Vous êtes sur la page 1sur 40

Cours de systme

Ordonnancement des processus


Sbastien Paumier

paumier@univ-mlv.fr

Illustrations provenant du site http://tux.crystalxp.net/

Le multi-tche

2 contraintes:

on ne doit rien changer aux habitudes de


programmation

un processus ne doit pas pouvoir squatter


le processeur

consquences:

hors de question de passer par une


participation active des processus

on doit avoir un support matriel, comme


pour la mmoire

paumier@univ-mlv.fr

The holy clock

solution: interruptions rgulires du


processeur par un mcanisme externe,
l'horloge
permet au noyau de reprendre le
contrle du processeur pour faire ce qu'il
a faire, comme changer de processus
en cours d'excution

paumier@univ-mlv.fr

Les interruptions

interruption=alerte que le processeur


peut recevoir n'importe quand et qui
suspend son activit courante pour tre
traite par un code spcial, le
gestionnaire d'interruption
vecteurs d'interruption=numros entre 0
et 255 de toutes les interruptions que le
processeur peut recevoir
arch/x86/kernel/traps.c:trap_init

paumier@univ-mlv.fr

Chemins de contrle

chemin de contrle=squence
d'instructions excute par le noyau pour
grer une interruption ou une exception
ces routines doivent tre:

rapides

protges contre les problmes de


rentrance

protges contre les problmes d'accs


concurrents sur les systmes multiprocesseurs

paumier@univ-mlv.fr

Les interruptions matrielles

mises par le matriel:

horloge, contrleurs de disque, clavier,


port srie, etc

traites par le contrleur d'interruption:

conversion du signal physique mis par


un priphrique en signal vers le
processeur pour le prvenir qu'une
interruption a eu lieu

attend un acquittement de celui-ci

paumier@univ-mlv.fr

Les interruptions matrielles

2 catgories:

masquables: peuvent tre


temporairement dsactives, pour
viter des problmes de rentrance
dans les gestionnaires d'interruptions

non masquables: rserves des


vnements trs critiques comme des
dfaillances du matriel; utilises entre
autres pour programmer des watchdog
timers

paumier@univ-mlv.fr

Les interruptions matrielles

E/S indpendantes du processus courant,


pouvant tre mises n'importe quand
rgle d'or sous Linux: pas de
commutation de processus pendant un
chemin de contrle li une interruption
matrielle !
mais, ils peuvent tre imbriqus

exemple: acquitter une interruption


pendant le traitement d'une autre

paumier@univ-mlv.fr

Les interruptions logicielles

programmables, pouvant tre


dclenches par du code
utilises pour implmenter des appels
systme, car ils doivent provoquer un
changement de contexte (utilisateur
noyau)
utilises aussi pour des vrifications de
dbordement et du dbogage

paumier@univ-mlv.fr

Les exceptions

interruptions produites quand le


processeur dtecte une anomalie
l'excution d'une instruction

faute: erreur pour laquelle on pourra rexcuter l'instruction fautive (exemple:


faute de page)

trappe: l'instruction ne sera pas relance


(exemples: interruption de dbogage,
division par zro)

abandon: erreur interne de l'UC

paumier@univ-mlv.fr

10

Les exceptions

relatives au processus courant


sauf bug du noyau, la seule exception
possible en mode noyau est la faute de
page

son gestionnaire est soigneusement crit


pour ne gnrer aucune exception

toutes les autres se produisent en mode


utilisateur

paumier@univ-mlv.fr

11

Synchronisation

certaines portions de chemins de


contrle ne doivent pas tre
interrompues sous peine de corrompre
des donnes
pour viter a, 4 techniques:

non-premptibilit des processus en


mode noyau

oprations atomiques

dsactivation des interruptions

verrouillage du noyau

paumier@univ-mlv.fr

12

Non-premptibilit

aucun processus ne peut tre prempt


quand il est en mode noyau
un processus en mode noyau peut tre
interrompu par un chemin de contrle,
mais il reprend son excution ensuite
cela garantit qu'un appel systme non
bloquant ne peut pas tre interrompu par
un autre appel systme pour le compte
d'un autre processus
pas vrai dans un noyau temps-rel

paumier@univ-mlv.fr

13

Atomicit

pour se protger avec des verrous, il faut


que la pose d'un verrou puisse se faire de
faon scurise
oprations atomiques des processeurs:

atomic_read(v)

atomic_set(v,i)

atomic_add(v,i)

atomic_dec_and_test(v)

etc

paumier@univ-mlv.fr

14

Bloquer les interruptions

utile quand on ne peut pas se contenter


d'une instruction atomique
manipuler avec prcaution:

si le processeur excute une instruction


bloquante comme une E/S sur disque, il
ne sera jamais rveill !

solution qui ne convient qu' de petites


portions de code

paumier@univ-mlv.fr

15

Verrous

principe: pour accder une portion de


code, il faut acqurir un verrou
tant que le verrou est pos, les autres
processus qui en ont besoin attendront
la libration du verrou, l'un d'eux
pourra acqurir le verrou son tour

paumier@univ-mlv.fr

16

Les spinlocks

attente active sur une valeur teste et


modifie de faon atomique
utiles quand il y a plusieurs processeurs
pour des raisons d'efficacit, il faut
essayer d'avoir des verrous les plus fins
possibles:

les uns en lecture, les autres en criture

verrous diffrents pour chaque type de


donnes protger

coteux, donc faire bien attention !

paumier@univ-mlv.fr

17

Les smaphores

verrous possdant:

un compteur pour savoir combien de


chemins de contrle attendent la
ressource

une file d'attente des processus endormis


en attente de la ressource

un spinlock permettant de garantir qu'un


seul processus va acqurir la ressource

les processus en attente sont suspendus

paumier@univ-mlv.fr

18

Etats d'un processus

include/linux/sched.h

paumier@univ-mlv.fr

(avec l'aimable autorisation de Dominique Revuz)

19

Ordonnancement

ordonnancement=slection du prochain
processus qui va s'excuter
ordonnancement non premptif:

on attend qu'un processus termine ou


fasse un appel bloquant

trs mauvais (boucle infinie ?)

ordonnancement premptif:

grce aux interruptions, le noyau peut en


plus reprendre rgulirement le
contrle au processus qui s'excutait

paumier@univ-mlv.fr

20

Ordonnancement

l'ordonnanceur doit viser plusieurs


objectifs:

viter les famines

grer des priorits d'excution

garantir un temps de rponse raisonnable


aux processus interactifs

occuper le CPU au maximum

viter autant que possible le cache


trashing

paumier@univ-mlv.fr

21

Mesures

on mesure ses performances avec (entre


autres critres):

le dbit: nombre moyen de processus


excuts en un temps donn

le taux utile: proportion de temps utilis


pour les processus utilisateurs

le temps de rponse (ex: dlai entre la


frappe d'une touche et l'affichage)

la premption permet d'entrelacer des


processus pour optimiser ces valeurs

paumier@univ-mlv.fr

22

Types de processus

2 grandes catgories de processus:

processus de calcul: utilisent


intensivement le CPU

processus interactifs:

attendent souvent l'utilisateur avec des


appels d'E/S bloquants
peuvent tre marqus comme prioritaires
car ils travaillent peu et rendent vite la
main

l'ordonnanceur essaie de deviner quel


type appartient chaque processus

paumier@univ-mlv.fr

23

Quantum de temps

chaque processus se voit attribu un


quantum de temps, qui peut
ventuellement tre diffrent d'un
processus l'autre
quand un processus est lu, il peut:

s'excuter pendant ce quantum de temps


avant d'tre prempt par le noyau

rendre la main cause d'un appel


systme bloquant

paumier@univ-mlv.fr

24

Round robin

algorithme du tourniquet:

tout processus ligible est plac en fin de


liste ds qu'il a rendu la main

on double les processus endormis

garantit l'absence de famine

problme: bien choisir le quantum

trop petit: le taux utile chute

trop grand: algo quivalent FCFS (First


Come First Served)

paumier@univ-mlv.fr

25

Priorits

amlioration avec des priorits:

chaque itration, on lit la tche la plus


prioritaire

quand elle a consomm son quantum de


temps, on lui donne une priorit basse

la priorit augmente avec le temps


d'attente, pour viter les famines

priorite base sur la valeur nice et


voluant en fonction de l'utilisation du
CPU
kernel/sched.c:schedule

paumier@univ-mlv.fr

26

Classes de priorits

le systme doit grer les diffrentes


priorits de faon intelligente
le processus le plus prioritaire doit
toujours tre le swappeur:

la faute de page est la seule exception


pouvant survenir en mode noyau

on doit pouvoir swapper pour la rsoudre

le swappeur ne doit jamais tre gn

paumier@univ-mlv.fr

27

Queues multiples

on peut affiner la gestion en sparant les


processus en plusieurs queues
chaque queue peut tre gre avec son
propre ordonnanceur
exemple:

round robin pour les tches interactives

FCFS pour les calculs en tche de fond

paumier@univ-mlv.fr

28

CFS

Completely Fair Scheduler


scheduler actuel de Linux, bas sur une
implmentation par arbres rouge-noir
la priorit dcrot en fonction de
l'utilisation relle du CPU
permet de grer de l'ordonnancement
par groupes de processus (par exemple,
par utilisateur)
kernel/sched_fair.c
Documentation/scheduler/scheddesignCFS.txt

paumier@univ-mlv.fr

29

Load balancing

sur les systmes multi-processeurs


(SMP), l'ordonnanceur doit choisir le
processeur qui va excuter le processus

la cration (fork balancing)

l'lection

permet parfois de garder des choses en


cache pour amliorer les performances
kernel/sched.c:set_task_cpu

paumier@univ-mlv.fr

30

Appels systme

on peut modifier les paramtres utiliss


par l'ordonnanceur avec:
nice/getpriority/setpriority
sched_yield: rendre volontairement le
processeur sans bloquer le processus
sched_no_yield.cpp

paumier@univ-mlv.fr

sched_yield.cpp

31

Appels systme

sched_setscheduler/sched_getscheduler:

changer la politique d'ordonnancement


du processus courant

SCHED_OTHER: round robin

SCHED_BATCH: traitement par lot


(excution moins frquente mais plus
longue)

SCHED_IDLE: priorit encore plus faible


que nice 19

SCHED_FIFO: FCFS

paumier@univ-mlv.fr

32

Le temps

pour grer le temps, le systme dispose


de plusieurs horloges:
horloge temps rel (RTC):

sur pile

indpendante de tout autre circuit

utilise pour initialiser la date et l'heure


au boot

met des interruptions n8


priodiquement

ordre de grandeur=milliseconde

paumier@univ-mlv.fr

33

Le temps

le compteur d'estampilles temporelles


(TSC):

sur les x86, registre mis jour


rgulirement, lisible par l'instruction
assembleur rdtsc

ordre de grandeur=nanoseconde

mais, des correctifs faire car la mise


jour peut tre instable
arch/x86/kernel/tsc.c

paumier@univ-mlv.fr

34

Le temps

le timer priodique programmable (PIT):

met rgulirement des interruptions n0

intervalle=tick

ordre de grandeur=milliseconde

utilis pour l'ordonnancement

tient jour l'horloge du systme:

utilise le TSC pour mettre jour la RTC


utile pour synchroniser les horloges de
machines en rseau

paumier@univ-mlv.fr

35

Les timers

unsignedintalarm(unsignedint
nb_sec);
envoie au processus en cours un signal
SIGALRM au bout d'une dure fixe en
secondes (peu prcis)
pour un timer plus prcis, il faut les
itimers:
intsetitimer(intwhich,const
structitimerval*value,struct
itimerval*ovalue);

paumier@univ-mlv.fr

36

Les timers

which dfinit le style de timer:

ITIMER_REAL: envoi de SIGALRM


l'expiration du dlai

ITIMER_VIRTUAL: envoi de SIGALRM


quand le processus a effectivement
consomm le temps indiqu en mode
utilisateur

ITIMER_PROF: envoi de SIGPROF quand


le processus a consomm tout le temps
imparti, modes noyau et utilisateur
cumuls

paumier@univ-mlv.fr

37

Les timers

value donne la prcision:


structitimerval{
structtimevalit_interval;/*valeursuivante*/
structtimevalit_value;/*valeuractuelle*/
};
structtimeval{
longtv_sec;/*secondes*/
longtv_usec;/*microsecondes*/
};

mais, on n'a pas une prcision parfaite...


itimer.cpp

paumier@univ-mlv.fr

38

Temps rel

pour une prcision encore meilleure, il


faut faire du temps rel (mou vs dur)
pour a, il faut un noyau capable de se
prempter lui-mme, ce qui est
compliqu grer cause des sections
critiques des chemins de contrle
RT mou support par Linux depuis le
noyau 2.6
kernel/sched.c:preempt_schedule

paumier@univ-mlv.fr

39

Temps rel dur

le RT mou n'est fiable qu' 99,XX %


pour une fiabilit totale, il faut un vrai
ordonnanceur temps rel
principe du double-noyau pour avoir du
RT dur
le noyau normal est vu comme une tche
de fond par l'ordonnanceur RT
ne travaille que s'il n'y a aucune tche
temps rel en cours

paumier@univ-mlv.fr

40