Cours 3 - Master 2 LSE Jalil Boukhobza Université de...

50
Cours 3 - Master 2 LSE Jalil Boukhobza Université de Bretagne Occidentale – Lab-STICC 1 J.Boukhobza-Systèmes d'exploitation l'embarqué

Transcript of Cours 3 - Master 2 LSE Jalil Boukhobza Université de...

Page 1: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Cours 3 - Master 2 LSE

Jalil Boukhobza

Université de Bretagne Occidentale – Lab-STICC

1 J.Boukhobza-Systèmes d'exploitation l'embarqué

Page 2: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Modalités 1 rapport d’une vingtaine de pages

1 exposé d’environ 20mn

1 démo

À exposer pour dans 6 semaines (en 2 séances?) -> (fin de la) 1ère semaine de novembre

Rapport à rendre pour dans 5 semaines (lundi de la rentrée des vacs 5 nov.)

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 2

Page 3: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Plan 1. L’ordonnancement

1. Définition

2. Métriques

3. Objectifs

2. Les algorithmes d’ordonnancement

3. L’ordonnancement sous VxWorks, Jbed et Linux TimeSys

4. L’ordonnancement sous Linux 2.6.x.

3 J.Boukhobza-Systèmes d'exploitation pour l'embarqué

Page 4: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Schéma d’un OS Applications

Librairies système (libc)

Interface d’appel système

Ordonnanceur

Gestionnaire de mémoire

IPC

Relatif aux processus

Système de fichiers

Réseau

Pilotes de périphérique

Relatif aux E/S

Code dépendant de l’architecture

matériel

4 J.Boukhobza-Systèmes d'exploitation pour l'embarqué

Mo

du

les

Page 5: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Tâches de l’ordonnanceur L’ordonnanceur est le composant de l’OS qui détermine

l’ordre et la durée des tâches qui s’exécutent sur le CPU. L’ordonnanceur dicte l’état dans lequel doivent se trouver

les tâches. Il charge et décharge le bloc de contrôle de la tâche

(descripteur de processus ou task_struct dans le cas de Linux).

Certains OS utilisent un processus séparé pour allouer le CPU au processus nouvellement sélectionné, il s’appelle le dispatcheur.

Tous les processus ne sont pas égaux L’interactivité est importante Les tâches de fonds… moins

5 J.Boukhobza-Systèmes d'exploitation pour l'embarqué

Page 6: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

L’ordonnancement Passer d’un processus à un autre est coûteux

1. Sauvegarde de l’état du processus

2. Chargement du nouvel état (registres, mémoire…)

3. Démarrage du nouveau processus

4. Invalidation probable du cache mémoire

Les processus alternent souvent des phases de calcul avec des phases d’E/S Si phases de calcul très importantes : CPU-Bound

Si E/S : I/O-Bound

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 6

Page 7: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Métriques clés Temps de réponse de l’ordo: temps pris par l’ordonnanceur

pour effectuer le changement de contexte pour une tâche prête, ce temps inclut le temps d’attente de la tâche dans la file des tâches prêtes.

Le temps pris par le processus pour compléter son exécution (Turnaround time).

Le temps et les données dont a besoin l’ordonnanceur pour choisir la tâche à exécuter (Overhead).

Équité: quels sont les facteurs déterminant quant au choix de la tâche à exécuter.

Débit: nombre de tâches traitées en un temps donné. Famine: un ordonnanceur doit (dans certains cas) assurer que ce

problème ne se produise pas… Préemptivité et non préemptivité

7 J.Boukhobza-Systèmes d'exploitation pour l'embarqué

Page 8: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Ordonnancement (quelques définitions) Ordonnancement: détermine l’ordre et le « timing » avec

lesquels les tâches doivent s’exécuter. Dispatching: le dispatcheur commence et arrête une

tâche. Chaque OS implémente une fonction d’ordonnancement

qui n’est pas une tâche en soit. Mais une fonction appelée à plusieurs endroits du noyau: Fin de routine d’interruption Lorsque les tâches sont mises en sommeil Lorsque les tâches sont prêtes à s’exécuter.

L’ordonnancement, c’est de la pure perte de temps: plus l’algorithme est complexe, moins il est bon de l’implémenter.

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 8

Page 9: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Quand ordonnancer ? Les décisions d’ordonnancement sont prises dans plusieurs circonstances: Fork

Qui choisir entre le père et le fils ?

Fin d’un processus En trouver un autre Si aucun, un processus spécial est exécuté (idle ou Processus inactif du système)

Quand un processus devient bloqué Attente d’une E/S ou d’une condition Peut influer sur le prochain à exécuter

Interruption E/S Si indique fin de traitement, réordonnancer le processus qui attendait

Ordonnancement non préemptif Un processus est choisi et détient le CPU jusqu’à ce qu’il bloque ou se termine

Ordonnancement préemptif Un processus n’a le CPU que pour une durée donnée (timeslice)

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 9

Page 10: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Différents besoins/différents ordonnancements Des systèmes ont des propriétés et besoins différents Il faut des ordonnanceurs adaptés Batch

Pas d’utilisateurs devant des écrans Ordonnanceurs non préemptifs ou presque… Changements de processus réduits Ex: compilateur de langage, recherche dans des BDs, calcul

scientifique, etc.

Interactif Préemption pour maintenir la réactivité Ex: éditeur de texte, shell, etc.

Temps réel Préemption Ex: Application vidéo, audio, collecte de données à partir d’un capteur.

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 10

Page 11: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Objectifs de l’ordonnancement Les objectifs des algorithmes d’ordonnancement dépendent du système

considéré Mais certaines propriétés sont communes

Ce qui est commun Respect des règles : permettre à certains processus d’avoir un

ordonnancement particulier Équilibre : Maximiser l’utilisation du système (alterner des E/S et du

CPU) « Équité : chaque processus doit avoir accès au CPU de manière

équitable »

Batch Débit : maximiser le nombre de jobs par heure Temps de réponse de l’appli: minimiser le temps entre la soumission et

la complétion CPU : maximiser l’utilisation du CPU

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 11

Page 12: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Objectifs (2) Interactif

Réactivité: répondre rapidement aux demandes Proportionnalité

Les utilisateurs ont souvent une idée du temps que va prendre une opération (click == rapide…)

L’ordonnanceur doit choisir les processus pour être conforme à leurs attentes

Temps réel Respecter les contraintes temporelles Prédictibilité : l’ordonnanceur doit être prévisible

Certains de ces objectifs peuvent ne pas être maximisés en même temps (voire contradictoires) Débit et temps de réponse par exemple…

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 12

Page 13: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Politique FCFS / exécution jusqu’à terminaison First Come First Served (premier arrivé, premier servi).

Ordonnancement utilisé pour les batchs

Approche non préemptive:

Pas de file d’attente de tâches bloquées

Temps de réponse lent

Surtout s’il existe des tâches longues

Dans ce cas: pb d’équité (les tâches courtes attendent plus que les tâches longues)

Famine: impossible.

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 13

Page 14: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Le plus court d’abord (SPN/Shortest Process Next) On suppose que le temps d’exécution est connu à

l’avance (dur dur !).

La tâche la plus courte de l’ensemble des processus s’exécute en premier.

Temps de réponse plus rapide que le précédent

Famine possible

Temps de calcul (de l’ordonnanceur) important: pour savoir quel processus doit s’exécuter

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 14

Page 15: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Ordonnancement coopératif Les tâches préviennent l’OS lorsqu’elles peuvent être

préemptées.

Ceci peut avoir lieu avant la fin de l’exécution.

Cet algorithme est implémenté en plus d’autres algorithmes FCFS et SPN.

Remarque: OS avec ordonnanceur non préemptif ne force pas un changement de contexte si aucune tâche n’est prête même dans le cas d’un ordonnancement coopératif, contrairement à un ordonnanceur préemptif.

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 15

Page 16: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Tourniquet/FIFO/Round Robin File d’attente FIFO stocke les processus prêts. Exécution indépendante de la charge de travail et de

l’interactivité. Quantum de temps égal pour tous

Durée maximale durant laquelle il peut s’exécuter S’il atteint son quantum, il est préempté S’il est bloqué avant, un autre processus est lancé

Famine: impossible Quantum de temps:

Trop grand: trop d’attente par processus Trop petit: temps de changement de contexte relativement

important (en pourcentage). En général, entre 10 et 50ms

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 16

Page 17: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

La notion d’espace de priorités 2 possibilités:

Certains OS laissent toutes les tâches (système et utilisateur) « vivre » dans un même espace de priorités.

D’autres isolent l’espace des priorités des processus système et utilisateurs (WindowsNT, Linux, UNIX) Sous Unix par ex, les tâches utilisateurs voulant augmenter leur priorités peuvent utiliser l’appel à nice()

… mais sont tous préemptées par une tâche système.

L’espace noyau a 3 types de « tâches » (en termes de priorités):

1. Interruptions: c’est une interruption hw (timer, clavier, réseau, etc). Ce type de tâche est appelé ISR (Interrupt Service Routine). Ce n’est pas vraiment une tâche mais une fonction exécutée indépendamment de l’ordonnanceur à chaque interruption. L’OS n’est pas impliqué.

2. Fonctions tasklets (minitâches) et routines de service différées: fonctions qui peuvent être activées par n’importe quelle tâche du noyau (pour la mini tâche) ou par une fonction d’interruption (pour les DSR). Les interruptions sont actives lors de l’exécution de ces fonctions et l’OS est impliqué pour déterminer l’ordre d’exécution.

3. Toutes les autres tâches du noyau: le niveau le moins prioritaire du noyau, préempte toutes les tâches utilisateurs.

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 17

Page 18: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Ordonnancement prioritaire Principe: tous les processus ne sont pas aussi importants les uns que les autres Chaque processus se voit attribuer une priorité Le processus de priorité supérieure préempte ceux de priorité inférieure. Pb de famine solution:

Priorité dynamique: à chaque tic d’horloge la priorité du processus en exécution est réduite

Si inférieure à un autre processus, changement de contexte

Optimiser les performances Un processus qui fait beaucoup d’E/S devrait avoir une grande priorité car il

consomme peu de CPU (linux 2.6 … ) Simple : la priorité est une fraction du quantum effectivement utilisé

Un processus qui tourne 1ms sur 50 a une priorité de 50 Un processus qui tourne 50ms a une priorité de 1

Pb d’inversion de priorité: processus de priorité importante est en attente d’exécution d’un processus de priorité inférieure. Et les processus avec une priorité entre les 2 derniers sont en cours d’exécution.

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 18

Page 19: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

RM/Rate Monotonic Scheduling RMS (Rate Monotonic Scheduling): les tâches se voient assignées une

priorité relative au nombre de fois où elles s’exécutent. L’ordonnanceur doit connaître la période de toutes les tâches sur le

système.

Etant donné un ensemble n de processus indépendants qui s’exécutent périodiquement: Plus la périodicité d’une tâche est petite, plus on lui accorde une

priorité importante. Toutes les dates limites d’exécution de tâches seront satisfaites si:

i: tâche périodique n: nombre de tâches périodiques Ti: la période d’exécution de la tâche i Ei: le pire temps d’exécution de la tâche i pour une période. Ei/Ti : la fraction de temps CPU requise pour exécuter la tâche i.

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 19

)12(/ /1 n

ii nTE

Page 20: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Exemple RMS: 2 tâches:

La tâche avec la période la plus courte: la plus grande priorité

L’utilisation CPU de ces tâches ne doit pas dépasser 82.8% pour pouvoir satisfaire les contraintes temporelles dures.

Si 100 tâches: n=100.

L’utilisation CPU doit être plus petite que 69.9% pour satisfaire les dates limites.

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 20

828.0)12(2 /1 nnn

Page 21: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

EDF (Earliest Deadline First) Plus proche date limite d’abord (tâches périodiques et

apériodiques).

Trois paramètres à prendre en compte et connaître pour donner des priorités aux processus:

Fréquence: nombre de fois que le processus est exécuté

Date limite: quand le processus doit avoir terminé son exécution.

Durée: temps d’exécution du processus.

Priorité dynamique (contrairement à RMS)

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 21

Page 22: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Ordonnancement préemptif et RTOS Si l’ordonnanceur respecte ses dates limites avec précision:

RTOS

Sinon EOS.

RTOS:

Ordonnancement doit être préemptif (la tâche de plus haute priorité doit préempter celle en cours d’exécution)

Exemple d’implémentation:

VxWorks: basé sur la priorité et tourniquet

Jbed: EDF

Linux (TimeSys): basé sur la priorité.

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 22

Page 23: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Priorité préemptive C’est ce qui permet le temps réel.

Tourniquet pour les tâches de la même priorité

Possibilité de verrouiller l’ordonnanceur (pour qu’une tâche ne soit pas préemptée).

Choix de la priorité: (0: plus haute priorité) int taskSpawn(

{Task Name},

{Task Priority 0-255, related to scheduling},

{Task Options – VX_FP_TASK, execute with floating point coprocessor

VX_PRIVATE_ENV, execute task with private environment

VX_UNBREAKABLE, disable breakpoints for task

VX_NO_STACK_FILL, do not fill task stack with 0xEE}

{Stack Size}

{Task address of entry point of program in memory– initial PC value}

{Up to 10 arguments for task program entry routine}

Ordonnancement sous VxWorks

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 23

Page 24: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Ordonnancement sous Jbed Ordonnancement EDF. Toutes les tâches (6 types) ont 3 variables:

duration: le temps alloué à la tâche pour compléter son exécution

allowance: le temps alloué pour gérer l’exception lorsque le temps imparti est fini.

deadline : date limite de fin d’exécution de la tâche

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 24

Public Task( Long duration, Long allowance, Long deadline, RealEvent event)

Throws AdmissionFailure

Public Task(java.lang.String name, Long duration, Long allowance, Long deadline, RealEvent event)

Throws AdmissionFailure

Public Task(java.lang.Runnable target, java.lang.String name, Long duration, Long allowance, Long deadline, RealEvent event)

Throws AdmissionFailure

Page 25: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Linux embarqué (Timesys) « L’ordonnanceur » est fait de 4 modules différents:

Module d’interface d’appels systèmes: interface entre processus utilisateur et les fonctionnalités du noyau

Module de politique d’ordonnancement: qui détermine quelle processus a accès au CPU.

Module de l’ordonnanceur spécifique à l’architecture: couche d’abstraction qui s’interface avec le matériel

Module de l’ordonnanceur indépendant du matériel: couche d’abstraction entre le module d’ordonnancement et le module spécifique à l’architecture.

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 25

So

urc

e: E

mb

edd

ed S

yste

ms

Arc

hit

ectu

re:

A c

om

pre

hen

sive

gu

ide

for

engi

nee

rs a

nd

p

rogr

am

mer

s,

Els

ieve

r ed

, T. N

oer

gaar

d,

200

5

Page 26: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Linux embarqué (2) La plupart des systèmes Linux (2.2/2.4) ne sont pas préemptibles, et ne sont

pas temps réel. Linux embarqué de Timesys est basé sur les priorités et a été modifié pour

permettre du temps réel: Modification des timers qui sont trop grossiers sous Linux (basé sur le

matériel) Partie de la task_struct pour le temps réel …

/* the scheduling policy, specifies which scheduling class the task belongs to, such as: SCHED_OTHER (traditional UNIX process), SCHED_FIFO (POSIX.1b FIFO realtime process - A FIFO realtime process will run until either

a) it blocks on I/O,

b) it explicitly yields the CPU or

c) it is preempted by another realtime process with a higher p->rt_priority value.) and SCHED_RR (POSIX round-robin realtime process SCHED_RR is the same as SCHED_FIFO, except that when its timeslice expires it goes back to the end of the run queue).*/

unsigned long policy;

//realtime priority

unsigned long rt_priority;

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 26

Page 27: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 27

Page 28: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Politique d’ordonnancement L’ordonnancement de Linux fonctionne avec des quanta

dynamiques Les processus sont ordonnés par priorité

La valeur de cette dernière indique à l’ordonnanceur quel processus exécuter en premier

Les priorités sont dynamiques Les processus qui n’ont pas eu le CPU voient leur priorité

augmentée (moins de pb de famine).

Linux reconnaît les processus temps réel (mou) Mais aucune notion « explicite » de batch vs interactif, …

mais implicite: Décision prise avec une heuristique basée sur le

comportement antérieur des processus

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 28

Page 29: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Appels systèmes nice(): change la priorité statique d’un processus getpriority(): obtient la priorité statique max d’un groupe de processus setpriority(): spécifie la priorité statique max d’un groupe de processus sched_getscheduler(): obtient la politique d’ordonnanceur. sched_setscheduler(): spécifie la politique d’ordonnanceur ainsi que les

priorités temps réel. sched_getparam(): obtient la priorité temps réel sched_setparam(): spécifie la priorité temps réel. sched_yield(): Rend le processeur volontairement sans bloquer le

processus. sched_get_priority_min(): Obtient la priorité temps réel min sched_get_priority_max(): Obtient la priorité temps réel max sched_rr_get_interval(): valeur du quantum pour le tourniquet sched_getaffinity(): masque d’affinité CPU sched_setaffinity()

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 29

Page 30: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Préemption Les processus peuvent être préemptés: Quand un processus devient TASK_RUNNING

Le noyau vérifie si sa priorité est plus grande que celle du processus en cours d’exécution

Si oui, l’exécution du processus courant est interrompue et l’ordonnanceur est invoqué

Quand un processus fini tout son quantum de temps Drapeau (champs flag) TIF_NEED_RESCHED mis à 1 dans

la structure thread_info Quand interruption horloge le noyau invoque

l’ordonnanceur si le drapeau est à 1.

Avant 2.6 Un processus en mode noyau ne pouvait pas être préempté

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 30

Page 31: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Exemple 2 processus

Un éditeur de texte interactif plus haute priorité dynamique

L’utilisateur alterne temps de réflexion et entrée des données.

Temps mis entre pressions sur le clavier est assez important

Un compilateur batch plus basse priorité.

Dès qu’il y a une pression sur un bouton:

Une interruption (relative à la pression sur le bouton) est générée

Le noyau réveille le processus de l’éditeur de texte (sort de la wait queue et devient prêt -> TASK_RUNING) .

Le noyau détermine/voit aussi la priorité de l’éditeur qui est supérieure à celle du compilateur.

Il met le drapeau TIF_NEED_RESCHED à 1 (du compilateur ) pour forcer l’ordonnanceur à s’activer lorsque le noyau aura fini de gérer l’interruption

L’ordonnanceur prend alors le relais et effectue le changement de processus

Le caractère est alors affiché sur l’écran.

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 31

Page 32: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Algorithme d’ordonnancement Version simple (<2.6)

A chaque changement de processus le noyau parcourt toute la liste des processus prêts

Calcule leur priorité

Et choisit le gagnant

Mais algorithme très coûteux si beaucoup de processus

Version 2.6 Sélectionne les processus en un temps constant

Une file de processus prêts par CPU

Distingue mieux les processus interactifs des batchs

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 32

Page 33: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Classes d’ordonnancement Les processus sont ordonnancés selon 3 classes

SCHED_FIFO :

Processus temps réel en fifo

Ordonnancement à priorité

Quand l’ordonnanceur assigne le CPU à un processus, il ne change pas sa position dans la runqueue des processus prêts (jusqu’à terminaison de l’exécution, sauf si processus de priorité plus importante).

Si un autre processus de même classe et même priorité est prêt …tant pis !

SCHED_RR

Processus temps réel en Round Robin (tourniquet)

Le descripteur de processus est mis en fin de liste une fois le CPU assigné

Permet à tous les processus temps réel de même priorité de partager le CPU

SCHED_NORM

Processus conventionnel (temps partagé) J.Boukhobza-Systèmes d'exploitation pour l'embarqué 33

Page 34: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Ordonnancement de processus conventionnels: Priorité statique Chaque processus conventionnel a une priorité statique

(PS) Utilisée par l’ordonnanceur pour ordonner les processus

conventionnels entre eux

Valeur de 100 (haute priorité) à 139 (basse priorité)

Un nouveau processus hérite de la priorité de son père

Quantum de base (QB en ms) Déterminé à partir de la priorité statique

Assigné à un processus qui a épuisé son quantum précédent Si PS < 120, QB = (140-PS)*20

Si PS >=120, QB = (140-PS)*5

Un processus de basse priorité aura un quantum faible

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 34

Page 35: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Priorité dynamique Chaque processus a, en plus une priorité dynamique (PD), de 100 (plus haute) à 139

(plus basse)

La priorité dynamique sert à l’ordonnanceur pour choisir le processus à exécuter

PD=max(100,min(PS-bonus +5, 139))

bonus est une valeur entre 0 et 10

Une valeur < 5 est une pénalité qui baissera la PD

Valeur >=5 augmente la priorité dynamique

La valeur du bonus dépend de l’historique du processus

Son temps moyen de sommeil

Temps moyen de sommeil:

Mesuré en nanosecondes, jamais plus grand que 1 seconde

Mesure différente selon l’état (TASK_INTERRUPTIBLE vs TASK_UNINTERRUPTIBLE)

Diminue quand le processus s’exécute

Le temps moyen de sommeil sert à déterminer si le processus est batch ou interactif

Si PD ≤ 3 * PS/4 + 28 alors interactif

Ce qui est équivalent à bonus – 5 ≥ PS/4 – 28

PS/4-28 est le delta interactif

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 35

Page 36: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Équivalence sommeil - bonus Temps de sommeil moyen Bonus

Entre 0 et 100ms 0

Entre 100 et 200ms 1

Entre 200 et 300ms 2

Entre 300 et 400ms 3

Entre 400 et 500ms 4

Entre 500 et 600ms 5

Entre 600 et 700ms 6

Entre 700 et 800ms 7

Entre 800 et 900ms 8

Entre 900 et 1 s 9

1 seconde 10

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 36

Page 37: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Exemple de valeurs de priorités pour des processus conventionnels

Description PS Valeur de nice

Quantum de base

Delta interactif

Priorité statique la plus haute 100 -20 800ms -3

Haute priorité statique 110 -10 600ms -1

Priorité normale 120 0 100ms +2

Basse priorité 130 +10 50ms +4

Priorité la plus basse 139 +19 5ms +6

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 37

bonus – 5 ≥ PS/4 – 28

Page 38: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Exemple Il est plus facile pour un processus de haute priorité

statique d’être interactif.

Un processus ayant une PS de 100

Est considéré comme interactif si la valeur du bonus >2

C’est-à-dire lorsque son temps moyen de sommeil est de 200ms.

Un processus avec une PS de 139 ne peut être considéré comme interactif

bonus – 5 ≥ PS/4 – 28 bonus ≥ 139/4-28+5

bonus ≥ 11 ce qui est impossible

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 38

Page 39: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Processus actifs et expirés Un processus conventionnel de haute priorité ne devrait pas

empêcher ceux de basse priorité de tourner

Quand un processus fini son quantum, il peut être remplacé par un processus de plus basse priorité qui n’a pas fini le sien

L’ordonnanceur maintient 2 ensembles de processus Processus Actifs : ils n’ont pas encore fini leur quantum

Processus expirés : ont épuisé leur quantum et ne peuvent pas s’exécuter tant qu’ils restent des processus actifs

Plus compliqué que cela en pratique: Un processus batch qui finit son quantum devient toujours expiré

Un processus interactif qui finit son quantum reste souvent actif: Sauf si le plus vieux processus expiré attend depuis « très longtemps »

Ou un processus expiré a une priorité statique plus élevée

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 39

Page 40: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Ordonnancement temps réel Chaque processus temps réel a une priorité temps réel de 1 (plus élevée)

à 99 L’ordonnanceur favorise toujours le processus temps réel de plus haute

priorité Aucun autre ne peut s’exécuter

sched_setparam()et sched_setscheduler( ) Les processus temps réel sont toujours considérés comme « actifs » Un processus temps réel est remplacé par un autre processus si:

Il est préempté par un autre de plus haute priorité temps réel Il effectue une opération bloquante et est mis en sommeil

(TASK_INTERRUPTIBLE ou TASK_UNINTERRUPTIBLE) Il est stoppé (TASK_STOPPED ou TASK_TRACED) ou tué

(EXIT_ZOMBIE ou EXIT_DEAD). Il rend volontairement le CPU avec un appel à sched_yield( ) Il est SCHED_RR et a fini son quantum

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 40

Page 41: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

La structure runqueue La structure principale pour l’ordonnancement sous Linux 2.6 est la

runqueue Chaque CPU en possède une Chaque processus dans le système appartient à une seule runqueue

Il ne peut donc être exécuté que sur un CPU particulier Mais migration entre runqueue possibles (équilibrage de charge)

La runqueue contient 2 tableaux Chacun contient 140 listes doublement chaînées de processus (1 par

priorité) 1 tableau contient les processus actifs, un autre les expirés

La runqueue a un pointeur actif sur la file des actifs, et un pointeur expired sur l’autre file.

Le rôle des tableaux change par une permutation des pointeurs (plus de processus actifs, on inverse)

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 41

Page 42: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

La structure runqueue (2)

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 42

Page 43: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Type Nom Description

spinlock_t lock Variable de verrouillage de la liste de processus

unsigned long nr_running Nombre de processus exécutables dans la file

unsigned long cpu_load Facteur de charge du CPU calculé d’après le nombre de processus dans la file

unsigned long nr_switches Nombre de changements de processus effectués

unsigned long nr_uninterruptible Nombre de processus qui étaient dans la runqueue et qui sont actuellement dans l’état TASK_UNINTERRUPTIBLE

unsigned long expired_timestamp Temps ou le plus vieux processus dans expired a été inséré.

unsigned long long timestamp_last_tick Descripteur de processus du processus en cours d’exécution

task_t * curr Valeur du timestamp de la dernière interruption d’horloge

task_t * idle Pointeur du descripteur de processus du swapper

struct mm_struct * prev_mm Pointeur utilisé lors du changement de processus pour sauver le pointeur du processus à enlever.

prio_array_t * Active Pointeur sur la liste des processus actifs

prio_array_t * expired Pointeur sur la liste des processus expirés.

prio_array_t [2] arrays Les deux ensembles de processus actifs et expirés

int best_expired_prio La meilleure PS parmi les processus expirés

atomic_t nr_iowait Nombre de processus qui étaient dans la runqueue et qui sont dans l’attente d’une opération disque d’E/S

struct sched_domain * sd Pointe sur le domaine d’ordonnancement de base de ce CPU

int active_balance Drapeau activé si un processus doit être migré de cette runqueue à une autre (équilibrage de charge)

int push_cpu Non utilisé

task_t * migration_thread Pointeur sur le descripteur de processus du thread de migration du noyau

struct list_head migration_queue Liste des processus à enlever de la runqueue.

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 43

Page 44: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Champs relatifs à l’ordonnancement dans le descripteur de processus (task_struct)

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 44

Type Nom Description

unsigned long thread_info->flags Enregistre le drapeau TIF_NEED_RESCHED qui est activé si l’ordonnanceur doit être appelé au retour d’une interruption

unsigned int thread_info->cpu Numéro logique du CPU auquel appartient la runqueue dans laquelle se trouve le processus

unsigned long state L’état courant du processus

int prio Priorité dynamique du processus

int static_prio Priorité statique du processus

struct list_head run_list Pointeur vers l’élément suivant et précédent dans la runqueue du CPU en question

prio_array_t * array Pointeur vers l’ensemble prio_array_t qui inclus le processus

unsigned long sleep_avg Temps de sommeil moyen du processus

unsigned long long timestamp Temps de la dernière insertion du processus dans la runqueue ou temps du dernier changement de processus incluant le processus actuel.

unsigned long long last_ran Temps du dernier changement de processus ayant remplacé le processus

int activated Code de condition utilisé lorsque le processus est réveillé

unsigned long policy Politique d’ordonnancement du processus (SCHED_NORMAL, SCHED_FIFO, ou SCHED_RR)

cpumask_t cpus_allowed Masque de bit du CPU qui exécute le processus

unsigned int time_slice Nombre de tics restant dans le quantum du processus

unsigned int first_time_slice drapeau mis à 1 si le processus n’a jamais fini son quantum de temps

unsigned long rt_priority Priorité temps réel du processus

Page 45: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Ordonnancement après fork Lorsqu’un nouveau processus est crée:

sched_fork()invoquée par copy_process() divise le quantum de temps restant du processus père de 2.

Le quantum de temps du fils est égal à celui du père /2

Evite de monopoliser le processeur par une même « famille »

p->time_slice = (current->time_slice + 1) >> 1;

current->time_slice >>= 1;

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 45

Page 46: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Les fonctions utilisées par l’ordonnanceur Scheduler_tick( ): garde le compteur du timeslice du processus à jour et vérifie

que le processus est toujours dans la liste active, sinon il met à 1 le drapeau TIF_NEED_RESCHED.

try_to_wake_up( ): réveille un processus endormi et l’insère dans la bonne runqueue (à partir de la wait queue).

recalc_task_prio( ): mets à jour le temps de sommeil moyen et la priorité dynamique d’un processus

schedule( ): sélectionne un nouveau processus à exécuter. Cette primitive est invoquée à plusieurs endroits:

Invocation directe lorsque le processus en cours d’exécution est bloqué.

Invocation « paresseuse »: en activant le drapeau TIF_NEED_RESCHED. Ce drapeau est toujours vérifié avant de reprendre l’exécution d’un processus en mode utilisateur.

Lorsque le processus a fini son quantum de temps (scheduler_tick())

Lorsqu’un processus est réveillé et qu’il a une priorité supérieure à celle de celui en cours d’exécution (try_to_wake_up()).

Lorsqu’un appel a sched_setscheduler( ) est effectué.

load_balance(): garde les runqueue des différents processeurs équilibrée.

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 46

Page 47: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Équilibrage de runqueues en environnement multiprocesseurs 3 types de machines multiprocesseurs (vu de Linux)

Architecture classique tous les CPUs partagent la même mémoire

Hyper-threading Un CPU HT exécute plusieurs threads en même temps Possède plusieurs copies des registres Permet de continuer à exécuter un thread quand un autre est en

attente mémoire Vue par Linux comme plusieurs CPUs logiques

NUMA Non-Uniform Memory Access Des CPUs et de la RAM sont groupés en nœuds L’accès à la mémoire du même nœud est très rapide, contrairement à

l’accès d’une mémoire distante

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 47

Page 48: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Équilibrage de runqueues (2) Un processus prêt est dans la runqueue d’un processeur

Le choix est fait lors du passage de l’état bloqué à l’état prêt

Si 2 processus CPU-bound se trouvent dans la même runqueue, alors risque de mauvaise utilisation de l’autre CPU

Le noyau vérifie périodiquement que les runqueues sont équilibrées

Déplacement de processus si nécessaire

Mais doit tenir compte de la topologie

Depuis Linux 2.6.7 introduction des scheduling domains

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 48

Page 49: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Domaines d’ordonnancement Un domaine d’ordonnancement est un ensemble de

CPUs pour lesquels la charge doit être équilibrée

Approche hiérarchique

Un domaine englobe tous les CPUs, puis des domaines fils englobent des groupes plus petits

Chaque domaine est partitionné en groupes

L’équilibrage se fait entres groupes du même domaine

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 49

Page 50: Cours 3 - Master 2 LSE Jalil Boukhobza Université de ...syst.univ-brest.fr/boukhobza/images/stories/Documents/...Interruptions: c’est une interruption hw (timer, clavier, réseau,

Appels système relatifs à l’ordonnancement Conventionnels

nice( ): changement de la valeur de « gentillesse ». Maintenu pour des raisons de compatibilité et remplacé par setpriority() Valeurs négatives: augmentation de priorité statique (superutilisateur)

getpriority( ) et setpriority( ): concerne tout le groupe de processus (priorité statique max).

sched_getaffinity( )et sched_setaffinity( ): quels sont les CPUs qui peuvent exécuter ce processus.

Temps réel sched_getscheduler( ) et sched_setscheduler( ): politique

d’ordonnancement sched_ getparam( ) et sched_ setparam( ): retourne les

paramètres de la politique d’ordonnancement (priorité temps réel). sched_yield( ): relâche le CPU. sched_get_priority_min( ) et sched_get_priority_max( ):

retourne la priorité min et max utilisable par le processus. sched_rr_get_interval( ): retourne la taille du quantum de temps de

la politique du tourniquet.

J.Boukhobza-Systèmes d'exploitation pour l'embarqué 50