Chapitre 3. Ordonnancement de tâches temps réel et standard Posix

Documents pareils
Ordonnancement temps réel

1 Mesure de la performance d un système temps réel : la gigue

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

DAns un système multi-utilisateurs à temps partagé, plusieurs processus

Programmation temps-réel Cours 1 et 2 Introduction et ordonnancement

Analyse du temps de réponse des systèmes temps réel

Introduction à la programmation concurrente

Les processus légers : threads. Système L3, /31

Systèmes et exécutifs temps-réel

Cours de Systèmes d Exploitation

Partie 7 : Gestion de la mémoire

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

Structure fonctionnelle d un SGBD

Cours Programmation Système

Julien MATHEVET Alexandre BOISSY GSID 4. Rapport RE09. Load Balancing et migration

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Chapitre 4 : Outils de communication centralisés entre processus

Ordonnancement temps réel

Problèmes liés à la concurrence

Introduction à la Programmation Parallèle: MPI

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Cours A7 : Temps Réel

Extension d'un outil de trace pour système embarqué temps réel. Encadrants : Laurent Pautet, Jérôme Hugues

ENSP Strasbourg (Edition ) Les Systèmes Temps Réels - Ch. DOIGNON. Chapitre 3. Mise en œuvre : signaux, gestion du temps et multi-activités

L exclusion mutuelle distribuée

Introduction aux Systèmes et aux Réseaux

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Chapitre 4 : Exclusion mutuelle

Administration de Parc Informatique TP03 : Résolution de noms

ORDONNANCEMENT CONJOINT DE TÂCHES ET DE MESSAGES DANS LES RÉSEAUX TEMPS RÉELS 4. QUELQUES EXEMPLES DU DYNAMISME ACTUEL DU TEMPS RÉEL

Exécutif temps réel Pierre-Yves Duval (cppm)

CCP PSI Mathématiques 1 : un corrigé

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Chapitre 5 : Flot maximal dans un graphe

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Systèmes temps-réel. Plan général. Matthieu Herrb. Mars Introduction - concepts généraux

1.6- Génération de nombres aléatoires

Introduction aux systèmes temps réel. Iulian Ober IRIT

Introduction au temps réel

CEG4566/CSI4541 Conception de systèmes temps réel

Cours A7 : Temps Réel

Un ordonnanceur stupide

Introduction à l informatique temps réel Pierre-Yves Duval (cppm)

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

IFT Systèmes d exploitation - TP n 1-20%

Génie Logiciel avec Ada. 4 février 2013

Cours 2: Exclusion Mutuelle entre processus (lourds, ou légers -- threads)

Les systèmes de base de données temps réels. Pokrovskaya Natalia, Kabbali Nadia

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

MEAD : temps réel et tolérance aux pannes pour CORBA

Temps Réel. Jérôme Pouiller Septembre 2011

Cours d initiation à la programmation en C++ Johann Cuenin

Poker. A rendre pour le 25 avril

Programmation Objet Java Correction

Architecture des ordinateurs

SIP. Plan. Introduction Architecture SIP Messages SIP Exemples d établissement de session Enregistrement

Algorithmique et programmation : les bases (VBA) Corrigé

Impact de choix d implantation sur les performances d une application de Contrôle-Commande

TP Temps Réel. Polytech Paris - Mars 2012

Threads. Threads. USTL routier 1

Projet Active Object

Runtime. Gestion de la réactivité des communications réseau. François Trahay Runtime, LaBRI sous la direction d'alexandre Denis Université Bordeaux I

Temps Réel. Jérôme Pouiller Septembre 2011

Conventions d écriture et outils de mise au point

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

Mobile OGSI.NET: Grid Computing on Mobile Devices

Gérer la répartition des charges avec le load balancer en GLSB

(Third-Man Attack) PASCAL BONHEUR PASCAL 4/07/2001. Introduction. 1 Domain Name Server. 2 Commandes DNS. 3 Hacking des serveurs DNS

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données


Modèles à Événements Discrets. Réseaux de Petri Stochastiques

Linux embarqué Retour d expérience et temps réel. Denis Coupvent-Desgraviers

Rappel sur les bases de données

COMPTABILITE SAGE LIGNE 30

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Bases de programmation. Cours 5. Structurer les données

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Projet gestion d'objets dupliqués

SYSTEMES ELECTRONIQUES NUMERIQUES

Comment régler un litige avec son vendeur de produits financiers?

Les transactions 1/46. I même en cas de panne logicielle ou matérielle. I Concept de transaction. I Gestion de la concurrence : les solutions

COMPTABILITE SAGE LIGNE 100

Les Systèmes de Gestion de Bases de Données Temps Réel

DNS ( DOMAIN NAME SYSTEM)

Métriques de performance pour les algorithmes et programmes parallèles

Internet et Multimédia Exercices: flux multimédia

ALOHA LOAD BALANCER METHODE DE CONTROLE DE VITALITE

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Gestion distribuée (par sockets) de banque en Java

Chapitre 6 -TP : Support Réseau des Accès Utilisateurs

FOCUS Evolution. Lisez-Moi. Version FE 7.0.t

Cours 6 : Tubes anonymes et nommés

Initiation au HPC - Généralités

Gestion des processus

Transcription:

Chapitre 3 Ordonnancement de tâches temps réel et standard Posix 93 1. Introduction à la problématique d ordonnancement Concepts et définitions T 2 T3 Document de conception R 1 T 1 T 4 R 2 T 6 T 5 Ensemble de tâches 94 1

Contraintes de tâches (1) Top départ Durée d exécution Echéance Contraintes individuelles Contraintes collectives 95 Contraintes de tâches (2) Modèle simple (tâches périodiques) 1 ère activation 2 ème activation 1 ère échéance 2 ème échéance a b c i ème activation i ème échéance 0 r 0 Délai critique r 0 +D r 0 +P r 0 +P+D r 0 +(i-1)p r 0 +(i-1)p+d r 0 : date de première activation C : pire durée d exécution = Max(a) + Max(b) + Max(c) D : délai critique P : période Si P = D : échéance sur requête 96 2

Charge processeur d une application TR u i = Ci P i : Pourcentage de l activité du processeur dédiée à la tâche T i U = n 1 i= Ci P i : Charge processeur = taux d utilisation du processeur pour les tâches périodiques U > m application non ordonnançable sur m processeurs (U m : Condition nécessaire, mais pas suffisante) 97 Contraintes de tâches (3) Type de tâche (critique ou non) Priorité de tâche Préemptible ou non Contraintes temporelles Tâche périodique ou apériodique Période Instant d arrivée (fixe, cyclique, aléatoire ) Durée d'exécution (Worst Case Execution Time ) Echéance absolue (date au plus tard de terminaison) Echéance relative (temps de réponse maximum) Autres Autres contraintes 98 3

Contraintes de tâches (4) Contraintes collectives Contraintes de relations entre tâches - Précédence - Partage de ressources Contraintes de répartition Contraintes de tolérance aux fautes 99 Notion d ordonnancement Ordonnancement = liste (partiellement) ordonnée d accès aux ressources partagées Entités ordonnançables : tâches, threads, processus, messages, Ordonnancement valide : Ordonnancement qui satisfait les contraintes temporelles L ordonnancement = discipline qui puise ses racines dans la recherche opérationnelle Pi Priorités ité importantes t attendues Optimalité Stabilité Complexité 100 4

Classification des algorithmes d ordonnancement Ordonnancement statique / Ordonnancement dynamique Ordonnancement hors ligne / Ordonnancement en ligne Préemptif / Non préemptif A priorités statiques / A priorités dynamiques Monoprocesseur / Multiprocesseur Local / Global (distribué) Oisif / Non oisif 101 2. Principaux algorithmes d ordonnancement de tâches périodiques indépendantes A priorités statiques Rate Monotonic : fondé sur les périodes A priorités dynamiques Earliest Deadline First (EDF) : fondé sur les échéances 102 5

Rate Monotonic Principe Priorité = F(Période) Plus petite période Plus prioritaire La priorité est inversement proportionnelle à la période RM est optimal (pour P i = D i ) Condition d ordonnançabilité (pour P i = D i ) : CS (théorème de la limite d utilisation - Lui 73) n i= 1 C 1 i n P i n(2 1) log 2 quand n log 2 69% n(2 n1 1) 103 RM : exemple 1 r 1 = r 2 = 0 D 1 = P 1 = 6 D 2 = P 2 = 9 C 1 = 2 C 2 = 3 Prio 2 < Prio 1 T 1 T 2 0 2 5 6 8 9 12 14 16 18 U = 0,67 < 2(2 1/2-1) = 0,83 CS vérifiée 104 6

RM : exemple 2 r 1 = r 2 = r 3 = 0 D 1 = P 1 = 6 D 2 = P 2 = 9 D 3 = P 3 = 18 C 1 = 2 C 2 = 3 C 3 = 4 Prio 3 < Prio 2 < Prio 1 T 1 T 2 T 3 0 2 5 6 8 9 12 14 16 18 U = 0,89 > 3(2 1/3-1) = 0,78 CS non vérifiée 105 Earliest Deadline First Principe Echéance la plus proche Plus prioritaire La priorité est inversement proportionnelle à l échéance EDF est optimal pour les systèmes de tâches indépendantes (pour P i = D i ) CNS pour les systèmes à échéance sur requête : U 1 106 7

EDF : exemple r 1 = r 2 = 0 D 1 = P 1 = 5 D 2 = P 2 = 3 C 1 = 3 C 2 = 1 T 1 T 2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 U = 3/5 + 1/3 = 14/15 < 1 le système est ordonnançable par EDF 107 3. Ordonnancement de tâches apériodiques indépendantes Cas des tâches apériodiques à contraintes strictes (Sporadiques) Alarme coupure courant Tap i (r i, C i, D i ) Transformation (à la conception) de tâches apériodiques en tâches périodiques Acceptation dans les temps creux d une séquence rigide de tâches (utilisation de test d acceptation) 108 8

Cas des tâches apériodiques à contraintes relatives Transfert d image Tap i (r i, C i ) Pas d échéance Optimiser le temps de réponse Traitement en arrière plan (background processing) les tâches apériodiques sont traitées pendant les temps d'oisiveté du processeur (quand il n y a pas de tâches périodiques à exécuter). Utilisation d'un dunserveur de tâches apériodiques Autres techniques 109 Serveur de tâches apériodiques Un serveur = une tâche périodique définie par une période Ps et une capacité Cs Quand le serveur est activé sa capacité est utilisée par les tâches apériodiques qu il gère pour s exécuter (i.e. les tâches apériodiques s exécutent à la place du serveur) Les tâches apériodiques sont exécutées seulement quand elles arrivent et quand la capacité du serveur n est pas nulle Différents types de serveurs existent selon les méthodes de réapprovisionnement de la capacité du serveur - serveur à scrutation - serveur eu ajournable ab - serveur sporadique - serveur à échange de priorité - serveur Earliest Deadline Last (EDL) - serveur à largeur de bande maximale - 110 9

Différentes stratégies pour le traitement de tâches apériodiques tâches périodiques rejet tâches sporadiques Test d acceptation Processeur Serveur X tâches apériodiques Serveur Y Arrière plan 111 Traitement en arrière plan tâches périodiques File d'attente de priorité élevée RM, EDF,... Processeur tâches apériodiques File d'attente de priorité faible FIFO ou priorité 112 10

Traitement en arrière plan : exemple T 1 (r 0 = 0, C=4, P=10) 0 4 10 14 20 T 2 (r 0 = 0, C=5, P=20) 0 2 4 9 20 Temps creux 0 9 10 14 20 Tâches apériodiques 0 8 9 10 14 18 20 T 3 (r =8, C=2) T 4 (r =12, C=3) 113 Serveur sporadique (sporadic server) Le serveur sporadique permet d améliorer les temps de réponse des tâches apériodiques, sans affecter les tâches périodiques. Le serveur sporadique ne réapprovisionne pas sa capacité de manière périodique mais seulement quand elle a été consommée par des tâches apériodiques. Il existe plusieurs formes de serveurs sporadiques, pour priorités fixes ou dynamiques (les serveurs sporadiques se distinguent par la manière de consommer et réapprovisionner la capacité de service) 114 11

Fonctionnement d un serveur sporadique simple (1) (avec priorités fixes) PR exe : priorité de la tâche en cours d exécution. PR s : priorité du serveur sporadique. P s : période du serveur sporadique. C s : capacité maximale du serveur sporadique. RT : instant où aura lieu le réapprovisionnement de la capacité du SS. RA : quantité de réapprovisionnement i qui sera rajoutée à la capacité du SS. Le SS est dit activable quand PR exe PR s (SS en cours de service ou bloqué par une tâche plus prioritaire). Le SS est dit inactif quand PR exe < PR s. Quand une tâche apériodique arrive, elle s exécute si la capacité du serveur n est pas nulle et si la priorité du serveur le permet (les tâches apériodiques s exécutent avec le même niveau de priorité que le serveur sporadique). Règles de réapprovisionnement de la capacité du serveur sporadique A l initialisation, la capacité du SS est approvisionnée avec la valeur maximale C s. L instant de réapprovisionnement RT est fixé dès le moment où le SS devient activale et C s > 0 (soit t a ce moment). La valeur de RT est fixé à t a + P s. La quantité de réapprovisionnement, RA, à effectuer à l instant RT est fixée au moment où le SS devient inactif ou quand sa capacité est épuisée (soit t 1 ce moment). La valeur de RA est fixée à une quantité égale à celle consommée durant l intervalle [t a, t 1 ]. 115 Serveur sporadique avec RM : exemple (1) T s (r 0 = 0, C s = 5, P s = 10, D s = 10) T 1 (C=1, P=5) 5 10 15 20 t T 2 (C=4, P=15) Tâches apériodiques Serveur activable t 1 a C s (t) 5 4 3 RA 1 = 0 (rien n a 2 été consommé 1 dans [0, 1] 0 t 1 1 t 2 a 5 10 15 20 C=2 C=2 5 10 15 20 5 10 15 20 t 2 1 RA 2 = 2 RA 3 = 2 RT RT 3 1 RT 2 5 10 15 20 116 t t t t 12

Serveur sporadique avec RM : exemple (2) - A t=0,t 1 (tâche la plus prioritaire) est activée et le SS (serveur sporadique) devient activable. Comme C s >0,RT 1 estfixéàt+p s =10. (t a1 =0) - A t=1,t 1 se termine, le SS devient inactif, car il n a pas de tâche apériodique à servir. RA 1 (pour t 11 = 1) est égale à 0 et aucun réapprovisionnement n est effectué à l instant RT 1,car aucune quantité de la capacité du SS n a naété consommée dans l intervalle [0, 1]. - A t=4, une tâche apériodique, T 3, arrive. Comme C s >0,leSSdevientactifetT 3 s exécute. Par conséquent un réapprovisionnement est prévu à RT 2 =t+p s = 14. (t a2 =4) - A t=5, la tâche apériodique T 3 est préemptée par T 1. Le SS reste activable pendant la préemption. - A t=6,t 1 se termine et T 3 reprend son exécution et se termine à t = 7. - A t=7, le SS devient inactif. La quantité de réapprovisionnement à faire à RT 2 est égale à la capacité consommée pendant l intervalle [4, 7], c est-à-dire, RA 2 =2. - A t=8 8, le SS devient actif pour servir une nouvelle tâche apériodique, T 4, arrivée à t=8 8. Un nouveau réapprovisionnement est prévu à RT 3 = t + P s = 18. (t a3 = 8) - A t = 10, T 4 se termine, mais le SS reste activable car PR exe PR s. - A t = 11, le SS devient inactif et la quantité de réapprovisionnement à faire à l instant RT 3 est fixée à RA 3 = 2 (2 étant la capacité consommée dans l intervalle [8, 11]). 117 4. Partage de ressources Fichiers, BD Utilisation de ressources critiques Mono ou multi exemplaires Mode lecture/écriture Demande de 1 ou n ressources Ressource physique E/S Difficultés : Interblocage Inversion de priorités Réseau 118 13

Inversion de priorité T 3 R Prio 3 < Prio 2 < Prio 1 R R R Libération de ressource R T 2 T 1 R R Durée de blocage R 119 Protocole à héritage de priorité : PIP (Priority Inheritance Protocol) Principe La tâche T i qui possède une section critique prend une priorité égale au Max{Prio i, Prio k T k en attente de la section critique}. Quand T i sort de la SC, elle reprend sa priorité initiale. Utilisable pour les ressources mono exemplaires 120 14

Exemple du protocole à héritage de priorité T 3 R R Reprend Prio 3 Hérite de Prio 1 R R R T 2 T 1 R R Prio 3 < Prio 2 < Prio 1 Blocage R 121 Protocole à plafond de priorité : PCP (Priority Ceiling Protocol) Principe Chaque ressource R x possède une priorité plafond égale à Max(Prio k T k pouvant accéder à R x x} }. On note Π s le maximum des priorités plafonds des ressources en cours d utilisation par des tâches. Π s est égal à une valeur inférieure à la priorité la plus basse quand aucune ressource n est utilisée. Quand une tâche T i veut accéder à une ressource R x qui est libre : - Cas 1 : si Prio i est supérieur à Π s, alors T i obtient R x. - Cas 2 : si Prio i n est pas supérieur à Π s, alors T i obtient R x seulement si T i est la tâche qui détient la (ou les) ressource(s) dont le plafond est égal à Π s. - Autres cas : T i est bloquée. Une tâche T i qui est en SC prend la priorité Prio = Max{Prio i, Prio k T k en attente de SC}. En d autres termes, si une tâche T i bloque une tâche T j, T i hérite de Prio j si Prio j > Prio i. Quand T i sort de la SC, elle reprend la priorité quelle avait avant d entrer en SC. 122 15

Exemple de fonctionnement de PCP R 2 T 1 T 2 T 3 T 4 R 1 R 3 Prio 4 < Prio 3 < Prio 2 < Prio 1 Plafond(R 1 ) = Prio 1 Plafond(R 2 ) = Prio 2 Plafond(R 3 ) = Prio 2 123 Exemple de fonctionnement de PCP (suite) T 1 T 2 R 2 Plafond(R 3 ) = Prio 2 => requête refusée T 3 R 3 Hérite de Prio 2 T 4 R 3 R 3 Prio 4 < Prio 3 < Prio 2 < Prio 1 Plafond(R 1 ) = Prio 1 Plafond(R 2 ) = Prio 2 Plafond(R 3 ) = Prio 2 124 16

Exemple de fonctionnement de PCP (suite) R 1 T R 1 1 R 1 Plafond(R 3 ) = Prio 2 < Prio1 T 2 R 2 T 3 T 4 R 3 R 3 Hérite de Prio 2 R 3 Prio 2 > Prio3 R Pas de ressource allouée 2 à d autres tâches R R 3 R 3 2 R 3 R 2 R 3 Prio 4 < Prio 3 < Prio 2 < Prio 1 Plafond(R 1 ) = Prio 1 Plafond(R 2 ) = Prio 2 Plafond(R 3 ) = Prio 2 125 Exemple de fonctionnement de PCP (suite) R 1 T 1 R 1 Plafond(R 3 ) = Prio 2 < Prio1 R 2 R 1 R 3 T 2 T 3 R 3 T 4 3 T 4 Hérite de Prio 2 Prio 2 > Prio3 R 2 R 3 R R R 3 R 3 2 R 3 3 R 2 R 3 R 2 R 2 R 3 R 2 Reprend sa Prio4 R 2 R 3 Prio 4 < Prio 3 < Prio 2 < Prio 1 Plafond(R 1 ) = Prio 1 Plafond(R 2 ) = Prio 2 Plafond(R 3 ) = Prio 2 126 17

5. Ordonnancement avec POSIX Principes - Chaque processus peut demander à être ordonnancé avec une politique qu il choisit. - Il y a quatre politiques : * SCHED_FIFO * SCHED_RR * SCHED_SPORADIC (introduit par Posix de 1999) * SCHED_OTHER (attention à la portabilité des applications!) - Chaque politique définit un nombre minimum de priorités (32 niveaux au moins) pour ordonnancer les processus. - Posix utilise une structure sched_param qui contient les infos nécessaires à l ordonnancement pour chaque politique supportée. - L utilisation des primitives d ordonnancement nécessite l intégration du fichier entête <sched.h> - Quand des threads sont en attente sur des mutex ou variables conditionnelles, ils sont réveillés selon leur ordre de priorité (i.e. le plus prioritaire est réveillé en premier). 127 Politiques d ordonnancement SCHED_FIFO (First In First Out) - Les threads à exécuter sont placés dans une file selon leur ordre d arrivée. - Il y a une liste par priorité. - Préemption : Le thread en cours d exécution continue à s exécuter jusqu à sa fin ou bien jusqu à ce qu il se bloque ou jusqu à ce qu un un thread plus prioritaire demande à sexécuter. s exécuter. - Lorsque le thread en cours se termine, le thread se trouvant en tête de file d attente la plus prioritaire est élu pour s exécuter. - Il est très difficile de garantir des contraintes de temps avec la politique FIFO SCHED_RR (round robin) - Cette politique s apparente à SCHED_FIFO, mais un thread n a le droit de s exécuter que pendant un certain quantum ensuite il est préempté et recyclé en queue de la file associée à sa priorité. - Il y a une file par priorité. - Cycle RR : intervalle de temps tel que chaque thread utilise son quantum. - Le cycle RR est généralement global au système. - Il est difficile de garantir des contraintes de temps avec la politique SCHED_RR Cours Module ASTRE 128 Z. MAMMERI IRIT - UPS - Toulouse 18

SCHED_SPORADIC - Technique utilisée pour servir des threads apériodiques. -Un serveur sporadique est défini par deux paramètres (contenu dans sched_param) * la période de réapprovisionnement du serveur (sched_ss_repl_period) * capacité du serveur (initialisée à sched_ss_init_budget) - La priorité d un thread servi par la politique SCHED_SPORADIC commute entre les valeurs de sched_priority et sched_ss_low_priority de la structure sched_param - La priorité affectée au thread servi par SCHED_SPORADIC est définie comme suit : * si la capacité restante du Serveur Sporadique n est pas nulle et le nombre d opérations de réapprovisionnement est inférieur à sched_ss_max_repl, la priorité du thread est fixée à sched_priority. Sinon, elle est fixée sched_ss_low_priority. * si la valeur aeu de sched ed_priority est inférieure e ou égale à celle e de sched ed_ss_ low _priority, le fonctionnement du système est indéfini. Il s agit d une mauvaise utilisation des priorités. 129 SCHED_SPORADIC (suite) La capacité disponible du SS est modifiée selon les règles suivantes : (1) Quand le thread en tête de file d attente associée à la priorité sched_priority devient actif, son temps d exécution ne doit pas dépasser la capacité disponible du SS. (2) A chaque fois que le thread est recyclé, c est-à-dire mis en queue de la file associée à la priorité sched_priority, parce que le thread est bloqué ou parce qu une opération de réapprovisionnement a eu lieu, l instant où cette opération est effectuée est mémorisée dans activation_time. (3) Quand le thread en exécution, avec la priorité égale à sched_priority, est préempté, il est mis en tête de la liste associée à cette priorité et le temps qu il a consommé est soustrait de la capacité disponible. (4) Quand le thread en exécution, avec la priorité égale à sched_priority, est bloqué le temps consommé est soustrait de la capacité disponible et l opération de réapprovisionnement est programmée comme l indiquent les règles (6) et (7). 130 19

SCHED_SPORADIC (suite) (5) Quand le thread en exécution, avec la priorité égale à sched_priority, atteint la limite imposée par son temps d exécution, il est mis en queue de liste associée à la priorité sched_ss_low_priority. Le temps consommé est soustrait de la capacité disponible et l opération de réapprovisionnement est programmée comme l indiquent les règles (6) et (7). (6) Chaque fois que l opération de réapprovisionnement a lieu, la quantité de réapprovisionnement, notée replenish_amount, est égale au temps consommé depuis l instant activation_time du thread. Le réapprovisionnement est programmé à l instant activation_time plus la valeur de sched_ss_repl_period. On peut avoir plusieurs opérations de réapprovisionnement (sans dépasser sched_ss_max_repl opérations) qui sont pendantes en même temps, chacune étant servie à son ton instant respectif. (7) Une opération de réapprovisionnement consiste à ajouter la quantité replenish_amount à la capacité disponible au moment du réapprovisionnement. La valeur de la capacité disponible est ramenée sched_ss_initial_budget si le réapprovisionnement conduit à dépasser ce seuil. 131 Combinaison de politiques - Un système peut gérer plusieurs processus avec des politiques différentes. Tâche Politique Priorité Quantum T1 SCHED_FIFO 1 - T2 SCHED_FIFO 2 - T3 SCHED_OTHER - - T4 SCHED_OTHER - - T5 SCHED_RR 5 15 T6 SCHED_RR 5 5 T7 SCHED_RR 5 10 T8 SCHED_FIFO 3 - T9 SCHED_FIFO 4 - T10 SCHED_SPORADIC 6 - T11 SCHED_SPORADIC 7-132 20

API pour l ordonnancement Primitives pour la manipulation des paramètres et politique d ordonnancement - La primitive pthread_getschedparam permet d obtenir les paramètres d ordo d un thread int pthread_getschedparam (pthread_t thread, int *policy, struct sched_param *param) /* sched_param contient (en général) la priorité. - La primitive pthread_setschedparam permet de modifier les paramètres d ordo d un thread int pthread_setschedparam (pthread_t thread, int policy, const struct sched_param *param) - La primitive sched_setscheduler permet de modifier la politique d ordonnancement et les paramètres (i.e. la priorité) d ordo d un processus int sched_ setsheduler (pid _ t pid, int policy, const struct sched_param *param) - La primitive sched_getscheduler permet d obtenir la politique d ordonnancement d un processus int sched_getscheduler (pid_t pid) 133 Primitives pour la manipulation des paramètres et politique d ordonnancement (suite) - La primitive sched_get_priority_max permet d obtenir le niveau de priorité le plus élevé d une politique d ordonnancement donnée. int sched_get_priority_max (int policy) - La primitive sched_get_priority_min permet d obtenir le niveau de priorité le plus bas d une politique d ordonnancement donnée. int sched_get_priority_min (int policy) - La primitive sched_rr_get_interval permet d obtenir la valeur du quantum associé à l exécution par round robin du processus spécifié. int sched_rr_get_interval (pid_t pid, struct timespec *interval) - La primitive sched_yield permet au processus appelant de libérer le processeur (CPU) et de se mettre en queue de file (i.e. il cède volontairement le processeur). int sched_yield (void) 134 21

Primitives de manipulation des attributs liés à l ordonnancement - Modifier les attributs des threads revient à remplir la structure des attributs de threads attr qui est du type pthread_attr_t. - La primitive pthread_attr_init permet d initialiser la structure d'attributs d un thread et la remplit avec les valeurs par défaut pour tous les attributs int pthread_attr_init (pthread_attr_t *attr) Valeurs par défaut (ces valeurs peuvent être changées par les primitives pthread_attr_set<nom de l attribut>): * Etat de création avec PTHREAD_CREATE_JOINABLE (qui signifie qu un autre thread peut se synchroniser avec la fin du thread et reprendre son exécution à la fin du thread en utilisant pthread_join) * Politique d ordonnancement = SCHED_OTHER * Priorité = 0 * Etat de création avec PTHREAD_EXPLICIT_SCHED (qui signifie que le thread créé hérite des attributs d ordonnancement de son père). - La primitive pthread_attr_destroy permet de supprimer des attributs d un thread int pthread_attr_destroy (pthread_attr_t *attr) 135 Primitives de manipulation des attributs liés à l ordonnancement (suite) - La primitive pthread_attr_getschedparam permet de connaître les attributs d ordonnancement d un thread. int pthread_attr_getschedparam (const pthread_attr_t *attr struct sched_param *param) - La primitive pthread_attr_setschedparam permet de modifier les attributs d ordonnancement d un thread. int pthread_attr_setschedparam (pthread_attr_t *attr const struct sched_param *param) - La primitive pthread_attr_getschedpolicy permet de connaître la politique d ordonnancement d un thread. int pthread_attr_getschedpolicy (const pthread_attr_t *attr, int *policy) - La primitive pthread_attr_setschedpolicy permet de modifier la politique d ordonnancement d un thread. int pthread_attr_setschedpolicy (pthread_attr_t *attr, int policy) 136 22

Primitives de manipulation des attributs liés à l ordonnancement (suite) - La primitive pthread_attr_getinheritshed permet de connaître la valeur de l attribut d héritage des propriétés d ordonnancement du fils à partir du père. int pthread_attr_getinheritsched (const pthread_attr_t *attr,int *inheritsched) - La primitive pthread_attr_setinheritsched permet de modifier d attribut d héritage des propriétés d ordonnancement int pthread_attr_setinheritsched (pthread_attr_t *attr, int inheritsched) - La primitive pthread_attr_getscope permet de connaître l étendue des propriétés d ordonnancement d un thread (pour le moment seul l étendue Système global est spécifiée) int pthread_attr_getscope (const pthread_attr_t *attr, int *scope) - La primitive pthread_attr_setscope permet de modifier l étendue des propriétés d ordonnancement d un thread. int pthread_attr_setscope attr (pthread_attr_t attr t *attr, int scope) 137 Utilisation de mutex à priorité Inversion de priorité : problème crucial pour les STRE Mutex à plafond de priorité : une solution pour éviter l inversion de priorité -Sidefined(_POSIXTHREAD_PRIO_PROTECT) defined(_posix_thread_prio_inherit) alors on peut utiliser les primitives sur les mutex à priorité. * Si la condition defined(_posixthread_prio_protect) est satisfaite, le système support le protocole à plafond de priorité ( Priority ceiling ) * Si la condition defined(_posix_thread_prio_inherit) est satisfaite, le système supporte l héritage de priorité ( priority inheritance ) 138 23

Définition et fonctionnement de mutex à plafond de priorité - Au moment de la création du mutex, on spécifie un plafond de priorité. Tout thread qui verrouille le mutex hérite automatiquement de cette priorité, ce qui lui permet de s exécuter sans être interrompu par un autre thread qui tenterait de verrouiller le mutex. - On peut lire ou modifier les attributs d un mutex à plafond de priorité. - Problèmes : * Les mutex à priorités ont un surcoût plus élevé que les mutex normaux. * S il y a des threads qui ont une priorité plus élevée que celle du mutex, le protocole évitement d inversion de priorité peut devenir inefficace 139 Primitives de manipulation de mutex à plafond de priorité - La primitive pthread_mutexattr_getprioceiling permet de connaître la priorité d exécution d un thread (créé avec pthread_mutexattr_init) après qu il ait verrouillé un mutex. int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *attr, int *prioceiling) - La primitive pthread_mutexattr_setprioceiling permet de spécifier la priorité d exécution d un thread (créé avec pthread_mutexattr_init) quand celui-ci verrouille un mutex. int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *attr, int prioceiling) - La primitive pthread_mutex_getprioceiling permet de connaître la priorité d exécution d un thread après qu il ait verrouillé un mutex. int pthread _ mutex_getprioceiling g (const pthread_ mutex_ t *mutex, int *prioceiling) - La primitive pthread_mutex_setprioceiling permet spécifier la priorité d exécution d un thread quand celui-ci verrouille un mutex int pthread_mutex_setprioceiling (const pthread_mutex_t *mutex, int prioceiling, int *old_ceiling) 140 24

Définition et fonctionnement de mutex à héritage de priorité - Quand un thread verrouille un mutex, la priorité des threads qui demandent à verrouiller le mutex est contrôlée ainsi : 1) Si un thread a verrouillé un mutex, il hérite de la priorité la plus élevée des threads bloqués en attente de ce mutex, à condition que sa priorité soit inférieure à celles des demandeurs. 2) Quand un thread déverrouille un mutex, il reprend sa priorité initiale. - On peut lire ou modifier les attributs d un mutex à héritage de priorité. - Le protocole à héritage de priorité est le plus répandu 141 Primitives de manipulation de mutex à héritage de priorité - La primitive pthread_mutexattr_getprotocol permet de savoir si un mutex (créé avec pthread_mutexattr_init) dispose ou non de l héritage de priorité. int pthread_ mutexattr_ getprotocol (const pthread_ mutexattr_ t *attr, int *protocol) - La primitive pthread_mutexattr_setprotocol permet de valider ou invalider le protocole d héritage de priorité pour un mutex (créé avec pthread_mutexattr_init) int pthread_mutexattr_setprotocol (pthread_mutexattr_t *attr, int protocol) où protocol peut prendre l une des valeurs suivantes : PTHREAD_PRIO_NONE /* Aucun protocole n est associé au mutex PTHREAD_PRIO_INHERIT PTHREAD_PRIO_PROTECT /* Protocole d héritage de priorité associé au mutex /* Protocole à plafond de priorité associé au mutex 142 25

Points forts / Points faibles de POSIX + Facilite la portabilité des applications + Offre un bon support pour l ordonnancement à priorités fixes - Ne supporte pas l ordonnancement dynamique et pas d activation périodique - Les intervalles de valeurs des priorités ne sont pas fixés - Si les intervalles de valeurs de priorités ne sont pas disjoints entre les politiques, que se passe-t-il? - La valeur du quantum pour le Round Robin et la possibilité de le changer dépend de l OS - Aucune garantie absolue sur les performances temps réel (les appels systèmes sont préemptibles). 143 Exercices Exercice 1 Quels sont les ensembles de tâches (parmi les ensembles suivants) ordonnançables avec RM? Avec EDF? Ensemble 1 = {T 1 (P 1 = 8, C 1 = 2), T 2 (P 2 = 4, C 2 = 1), T 3 (P 3 = 6, C 3 = 3)} Ensemble 2 = {T 1 (P 1 = 8, C 1 = 4), T 2 (P 2 = 12, C 2 = 4), T 3 (P 3 = 20, C 3 = 4)} Ensemble 3 = {T 1 (P 1 = 8, C 1 = 4), T 2 (P 2 = 10, C 2 = 2), T 3 (P 3 = 12, C 3 = 3)} 1. Donner une séquence d ordonnancement RM qui se répète indéfiniment pour un des ensembles qui est ordonnançable avec RM. 2. Donner une séquence d ordonnancement EDF qui se répète indéfiniment pour un des ensembles qui est ordonnançable avec EDF. Exercice 2 Soit un système contenant les tâches périodiques suivantes : T 1 (P 1 = 10, C 1 = 2), T 2 (P 2 = 20, C 2 = 4) et P 3 = 5, C 3 = 1). Un serveur sporadique est utilisé pour servir les tâches apériodiques. 1. Supposons que toutes les tâches sont ordonnancées avec EDF. - Quelles sont la période et capacité maximale du serveur sporadique? - En retenant comme période du serveur sporadique 10, donner la séquence d ordonnancement si trois tâches apériodiques arrivent comme suit : T 4 (r 4 = 6, C 4 = 3), T 5 (r 5 = 8, C 5 = 2), T 6 (r 6 = 11, C 6 = 3) 2. Mêmes questions avec RM (mais en retenant 20 comme période du serveur sporadique). 144 26

Exercices Exercice 3 Montrer que le protocole PIP ne permet pas d éviter les inrteblocages. Exercice 4 Démontrer que les situations d interblocage ne peuvent pas apparaître si PCP est utilisé. Exercice 5 Expliquer l impact de l unité avec laquelle sont exprimées les contraintes temporelles sur les performances du système. 145 27