Temps Réel. Jérôme Pouiller <j.pouiller@sysmic.org> Septembre 2011



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

Ordonnancement temps réel

Introduction à la programmation concurrente

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

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

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

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

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

Problèmes liés à la concurrence

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

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

Conventions d écriture et outils de mise au point

Synchro et Threads Java TM

Introduction à la Programmation Parallèle: MPI

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

Un ordonnanceur stupide

On appelle variable condition une var qui peut être testée et

Cours de Systèmes d Exploitation

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

Introduction aux Systèmes et aux Réseaux

INF6500 : Structures des ordinateurs. Sylvain Martel - INF6500 1

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

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

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours A7 : Temps Réel

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

Annexe 6. Notions d ordonnancement.

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

Introduction : les processus. Introduction : les threads. Plan

Cours de Base de Données Cours n.12

Projet gestion d'objets dupliqués

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Introduction aux algorithmes répartis

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Chapitre 4 : Exclusion mutuelle

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

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Recherche dans un tableau

Certificat Big Data - Master MAthématiques

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

TP : Gestion d une image au format PGM

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

<Insert Picture Here> Solaris pour la base de donnés Oracle

Ordonnancement temps réel

TD2 Programmation concurrentielle

Les structures de données. Rajae El Ouazzani

LOG4430 : Architecture et conception avancée

ASR1 TD7 : Un microprocesseur RISC 16 bits

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

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

Cours Programmation Système

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

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

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

Systèmes d exploitation Gestion de processus

Algorithmique et Programmation, IMA

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Cours 6 : Tubes anonymes et nommés

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Les arbres binaires de recherche

Conception des systèmes répartis

Programmation C. Apprendre à développer des programmes simples dans le langage C

Gestion des transactions et accès concurrents dans les bases de données relationnelles

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

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

Modélisation des interfaces matériel/logiciel

TP Temps Réel. Polytech Paris - Mars 2012

gestion des processus La gestion des processus

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

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Threads. Threads. USTL routier 1

Réplication des données

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996]

Licence Sciences et Technologies Examen janvier 2010

Initiation au HPC - Généralités


Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

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

Exercices INF5171 : série #3 (Automne 2012)

ACTIVITÉ DE PROGRAMMATION

SugarCubes. Jean-Ferdinand Susini Maître de Conférences, CNAM Chaire systèmes enfouis et embarqués. Paris, le 9 janvier, 2009

Algorithmique répartie

Cours 1 : La compilation

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Programme Compte bancaire (code)

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

Flexible Identity. authentification multi-facteurs. authentification sans token. Version 1.0. Copyright Orange Business Services mai 2014.

Playing with ptrace() for fun and profit

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Cours 1 : Qu est-ce que la programmation?

Introduction au temps réel

Alfstore workflow framework Spécification technique

Transcription:

Temps Réel Jérôme Pouiller <j.pouiller@sysmic.org> Septembre 2011

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis inquième partie V Partage de ressources J. Pouiller Temps Réel 123 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis 13 Ordonnancement avec contraintes de précédance 14 Problèmatique des accès concurents Protection des structures de données Protection des ressources matériel Réentrance Partage de ressource entre deux tâches : Fonctionnement d un mutex 15 Problème liés aux partage de ressources ead Lock Latence introduite Inversion de priorité 16 Solutions Priority inheritence Original ceiling priority Immediate Priority ceilling 17 utres mécanismes de gestion d accès concurrents ésactivation de l ordonnanceur Sémaphore J. Pouiller Temps Réel 124 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis ontraintes de précédence (1) Problèmatique : Une tâche j doit s éxecuter après i Les contraintes de précédence sur l ordre d exécution des tâches les unes par rapport aux autres sont généralement décrites par un graphe orienté : i < j indique que la tâche i est un prédécesseur de j i j indique que la tâche i est un prédécesseur immédiat de j E J. Pouiller Temps Réel 125 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis ontraintes de précédence (2) Ici, seulement précédence simple : Les tâche dépendantes ont la même période Principe de l établissement de l ordonnancement : Transformer l ensemble des tâches dépendantes en un ensemble de tâches indépendantes que l on ordonnancera par un algorithme classique Par des modifications des paramètres des tâches : si i j alors la règle de transformation doit respecter : r j r i P i < P j Validation de l ordonnancabilité selon des critères utilisés pour des tâches indépendantes J. Pouiller Temps Réel 126 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis ontraintes de précédence avec RM ontraintes de précédence et Rate Monotonic : la transformation s opère hors ligne sur la date de réveil et sur les délais critiques r i = max{r i,r j } pour tous les j tels que j i si i j alors P i > P j dans le respect de la règle d affectation des priorités par Rate Monotonic J. Pouiller Temps Réel 127 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple - RM E Tâche rrivée ri 0 5 0 0 E 0 P i J. Pouiller Temps Réel 128 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple - RM E Tâche rrivée ri 0 0 5 5 0 0 0 5 E 0 5 P i J. Pouiller Temps Réel 128 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple - RM E renouveller pour chaque période Tâche rrivée ri P i 0 0 1 5 5 1 0 0 2 0 5 2 E 0 5 3 J. Pouiller Temps Réel 128 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis ontraintes de précédence avec M ontraintes de précédence et eadline Monotonic : la transformation s opère hors ligne sur la date de réveil et sur les délais critiques { } ri = max r i,rj pour tous les j tels que j i { } i = max i,j pour tous les j tels que j i (ne corrspond pas au délais critique réel) si i j alors P i > P j dans le respect de la règle d affectation des priorités par eadline Monotonic J. Pouiller Temps Réel 129 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple - M E Tâche rrivée élai ri 0 5 i P i 5 7 0 5 0 10 E 0 12 J. Pouiller Temps Réel 130 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple - M E Tâche rrivée élai ri 0 5 0 i P i 5 7 5 0 5 0 0 10 5 E 0 12 5 J. Pouiller Temps Réel 130 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple - M E Tâche rrivée élai ri i 0 5 0 5 P i 5 7 5 7 0 5 0 5 0 10 5 10 E 0 12 5 12 J. Pouiller Temps Réel 130 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple - M E Tâche rrivée élai ri i P i 0 5 0 5 1 5 7 5 7 3 0 5 0 5 2 0 10 5 10 4 E 0 12 5 12 5 renouveller pour chaque période J. Pouiller Temps Réel 130 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis ontraintes de précédence avec EF ontraintes de précédence et EF modification des échéances de facon à ce qu une tâche ait toujours un di inférieur à celui de ses successeurs (algorithme de hetto et al.) une tâche ne doit être activable que si tous ses prédécesseurs ont terminé leur exécution modification de la date de réveil et de l échéance r i { { = max r i,max { d i,min di = min r j + j }} pour tous les j tels que j i { d j j }} pour tous les j tels que i j on itère sur les prédécesseurs et successeurs immédiats on commence les calculs par les tâches qui n ont pas de prédécesseurs pour le calcul des r et par les tâches qui n ont pas de successeur pour le calcul des d J. Pouiller Temps Réel 131 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple - EF E Tâche rrivée élai ri 0 5 5 7 0 5 0 10 E 0 12 d i J. Pouiller Temps Réel 132 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple - EF E Tâche rrivée élai ri 0 5 0 5 7 5 0 5 1 0 10 7 E 0 12 8 d i J. Pouiller Temps Réel 132 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple - EF E Tâche rrivée élai ri di 0 5 0 3 5 7 5 7 0 5 1 5 0 10 7 9 E 0 12 8 12 renouveller pour chaque période J. Pouiller Temps Réel 132 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple de partage de données Le partage de données entre les tâches posent les mêmes problème que le partage de données avec les interruptions Prennons deux tâches f1 et f2 : int a = 0; char t[255]; void f1() { t[a] = data1; a++; } void f2() { t[a] = data2; a++; 10 } J. Pouiller Temps Réel 133 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple de partage de données Prennons le cas ou f1 est préemptée par f2 : t[a] = data1; // t[0]; a++; // a = 2 maintenant t[a] = data2; 3 // t[0] est écrasé! a++; // a = 1 maintenant u lieu d écrire les deux donnée l une après l autre, la valeur de data1 est perdue alors que t[1] contiendra une valeur aléatoire. J. Pouiller Temps Réel 134 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple de ressource partagée as d un périphérique réseau avec des registres mappés en mémoire. Le registre 0x0 permet de placer la donnée à envoyer. L écriture d un 1 sur le registre 0x4 permet d effectuer l envoi : void send(int data) { *0x0 = data; 3 *0x4 = 1; } J. Pouiller Temps Réel 135 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple de ressource partagée Etudions le cas de l éxecution simultanée de cette fonction par deux tâches. La première tâche appelle send avec data = 42 : *0x0 = 42 La tâche est préemptée. La seconde tâche appelle send avec data = 10 : *0x0 = 10 *0x4 = 1 10 est envoyé. La tâche 1 reprend la main : *0x4 = 1 10 (au lieu de 42) est de nouveau envoyé. e cas est aussi valable dans le cas d une interruption (bien que plus rare dans la pratique). J. Pouiller Temps Réel 136 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis omment éviter le problème? Nous devons élargir ce que nous avons précédement vu pour le partage d informations avec les interruptions. Les problèmes d accès concurrents se traduisent très souvent par des races conditions. est à dire des problèmes aléatoires produit par une séquence particulière d évènements Les race conditions sont souvent difficiles à reproduire et à identifier Les race conditions peuvent être latente dans le code et se déclarer suite à une modification de l environnement externe Une race condition coûte chère (diffuculté de correction, peut potentiellement atterrir en production) J. Pouiller Temps Réel 137 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis omment s en protèger? omment s en protèger? Ne pas utiliser de variables globales ou de ressources partagées Utiliser des accès atomiques Placer des accès aux ressources partagée dans des sections critiques Une fonction pouvant être appellée simultanénement depuis deux contextes de tâches différentes est dite réentrante J. Pouiller Temps Réel 138 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Partage de ressources critiques Une ressource critique ne peut : être utilisée simultanément par plusieurs tâches être réquisitionnée par une autre tâche Notion de section critique : séquence d instructions pendant lesquelles on utilise une ressource critique sans problème dans le cas d un ordonnancement non préemptif, mais c est rarement le cas dans un environnement temps réel évaluation du temps de réponse très difficile, sinon impossible (abondante littérature!) J. Pouiller Temps Réel 139 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Fonctionnement d un mutex Nécessite une instruction assembleur premettant un accès en lecture et une écriture en une instruction : test_and_set affecte le registre d état en fonction de la valeur du registre et affecte la valeur 1 au registre. On peut développer la fonction lock à partir de là : void lock(mutex_t *m) { while (test_and_set(m)) schedule(); } void unlock(mutex_t *m) { m = 0; schedule(); 9 } J. Pouiller Temps Réel 140 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Fonctionnement d un mutex Un peu mieux : 1 void lock(mutex_t *m) { while (test_and_set(m)) { this_task.reason = m; this_task.state = stop; schedule(); } } void unlock(mutex_t *m) { m = 0; 11 foreach (i in tasks) if (i.state == stop && i.reason == m) i.state = run; schedule(); } J. Pouiller Temps Réel 141 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Problèmes associés aux sections critiques Voici les problèmes à prendre en considération lors de l utilisation de sections critiques : ead Lock Latence induite Inversion de priorité J. Pouiller Temps Réel 142 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis ead lock ussi appellé étreinte fatale eux tâches utilisent deux ressources imbriquées dans l ordre inverses Tache 1 : Tache 2 : lock(m1); 5 lock(m2); 5 lock(m2); // eadlock ici: lock(m1); 0 1 2 3 4 5 6 7 8 9 J. Pouiller Temps Réel 143 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis ead lock Remarque : Le code suivant : lock(m); lock(m); entraine un double lock, un type particulier de ead lock J. Pouiller Temps Réel 144 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Mutex dans une interruption Remarque : Ne jamais utiliser de mutex dans une interruption. Si la ressource est occuppée par la tâche qui vient d être préemptée, le lock() s éxécutera dans le même contexte ouble lock e plus, le blocage d un mutex peut entrainer peut entrainer une très important latence ce qui est en contradiction avec l objectif de rester le minimum de temps dans une interruption Règle générale : Il ne faut pas appeller schedule dans une interruption. J. Pouiller Temps Réel 145 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Latence as d une tâche de faible priorité utilisant une ressource d une tâche de haute priorité. Existe uniquement en environnement préemptif Exemple avec deux tâches P < P : as sans partage de ressource : 0 1 2 3 4 5 6 7 8 9 10 TR = 3 as avec une ressource partagée : 0 1 2 3 4 5 6 7 8 9 10 TR = 6 J. Pouiller Temps Réel 146 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Inversion de priorité Phénomène dû à la présence simultanée de priorités fixes et de ressources à accès exclusif dans un environnement préemptif Une tâche de priorité intermédiaire peut être élue par l ordonnanceur alors que des tâches de plus haute priorité attentent. Il est diffile de calculer le temps de blocage des tâches par une inversion de priorité (il est généralement non-borné) as notable de Path Finder J. Pouiller Temps Réel 147 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Inversion de priorité Exemple : On ajoute à l exemple précédant une tâche telle que : P > P > P as sans partage de ressource : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 as avec un mutex : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 La tâche s éxecute alors qu elle a une priorité inféreure à et ne partage aucune ressource avec. J. Pouiller Temps Réel 148 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Temps de réponse vec les ressources partagées : Le temps de réponse avec un algorithme à priorité fixe devient : TRi TR i = i + i + j T P j >P i j i est le temps de blocage de la tâche i par une ressource détenue par une tâche de priorité inférieure. i est difficile à calculer La condition nécessaire d ordonnancabilité par un algorithme Rate Monotonic devient : ( ) i tasks, k + ( ) i i 2 1 i 1 T k T i k tasks J. Pouiller Temps Réel 149 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis onseils Essayer de limiter la taille des sections critique Essayer de découper les sections critiques de manière à favoriser la préemption des tâches de haute priorité Essayer de diminuer la granularité des mutex afin de limiter la taille des sections critiques. J. Pouiller Temps Réel 150 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Héritage de priorité ussi appellé Priority inheritence Principe : Si une tâche bloque une ressource demandée par une tâche de plus haute priorité, elle acquiert temporairement la priorité de la tâche de haute priorité. ttention à la gestion de l héritage en cascade. L algorithme parait simple, mais c est assez complexe. Il existe même des cas problèmatiques (dont le cout de résolution est polynomial) dans le cas d architectures multiprocesseurs symétriques sur des rw_lock. Exemple précédent : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 J. Pouiller Temps Réel 151 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Héritage de priorité utre exemple : Soit 3 tâches et 2 ressources telle que et partage la première ressource et et partage la seconde : P > P > P 0 1 2 3 4 5 6 7 8 9 10 11 J. Pouiller Temps Réel 152 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Héritage de priorité oncernant le temps de réponse des tâches dans un système intégrant l héritage de priorité : Le temps de blocage i d une tâche de haute priorité par une tâche de plus basse priorité nominale est borné... mais le calcul de ce temps de blocage maximum reste très complexe J. Pouiller Temps Réel 153 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Problème rémanent locages en chaîne (cf. notre exemple avec 3 tâches) eadlock J. Pouiller Temps Réel 154 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Priorité plafonnée originale ussi appellée Original eiling Priority Protocol (OPP) ou tout simplement eiling Priority Introduit à la fin des années 80 pour résoudre le problème d inversion de priorité tout en prévenant l occurence de deadlocks et de blocages en chaîne mélioration du protocole d héritage de priorité : une tâche ne peut pas entrer dans une section critique s il y a un sémaphore acquis qui pourrait la bloquer Principe : on attribue à chaque sémaphore une priorité plafond égale à la plus haute priorité des tâches qui pourraient l acquérir. Une tâche ne pourra entrer dans la section critique que si elle possède une priorité supérieure à toutes celles des priorités plafond des sémaphores acquis par les autres tâches J. Pouiller Temps Réel 155 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis lgorithme On attribue à chaque sémaphore S k une priorité plafond (S k ) égale à la plus haute priorité des tâches susceptibles de l acquérir Soit i la tâche prête de plus haute priorité : l accès au processeur est donné à i Soit S le sémaphore dont la priorité plafond (S ) est la plus grande parmi tous les sémaphores déjà acquis par des tâches autres que i Pour entrer dans une section critique gardée par un sémaphore S k, i doit avoir une priorité supérieure à (S ). Si P i (S ), l accès à S k est interdit et on dit que i est bloquée sur S par la tâche qui possède S. La priorité de i est alors passée à la tâche proriétaire de S J. Pouiller Temps Réel 156 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Priorité plafonnée immédiate ussi appellée Immediate eiling Priority Protocol (IPP) ou Hightest Lock Similaire à OPP mais plus simple. ès qu une tâche acquiert une sémaphore S k, elle acquiert sa priorité (S k ) en même temps J. Pouiller Temps Réel 157 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple Tâche rrivée Priorité apacité Ressources 4 1 5 12_ 2 2 4 _22_ 2 3 2 0 4 6 _1111_ J. Pouiller Temps Réel 158 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple Tâche rrivée Priorité apacité Ressources 4 1 5 12_ 2 2 4 _22_ 2 3 2 0 4 6 _1111_ Sans mécanisme de protection 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 TR = 12 TR = 6 TR = 8 TR = 17 J. Pouiller Temps Réel 158 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple Tâche rrivée Priorité apacité Ressources 4 1 5 12_ 2 2 4 _22_ 2 3 2 0 4 6 _1111_ Par héritage de priorité 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 TR = 9 TR = 12 TR = 14 TR = 17 J. Pouiller Temps Réel 158 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple Tâche rrivée Priorité apacité Ressources 4 1 5 12_ 2 2 4 _22_ 2 3 2 0 4 6 _1111_ Par Priority eiling, les priorités plafond sont donc : (S 1 ) = P (S 2 ) = P J. Pouiller Temps Réel 158 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple Tâche rrivée Priorité apacité Ressources 4 1 5 12_ 2 2 4 _22_ 2 3 2 0 4 6 _1111_ Par priorité plafonnée originale : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 TR = 7 TR = 12 TR = 14 TR = 17 J. Pouiller Temps Réel 158 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple Tâche rrivée Priorité apacité Ressources 4 1 5 12_ 2 2 4 _22_ 2 3 2 0 4 6 _1111_ Par priorité plafonnée immédiate : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 TR = 6 TR = 12 TR = 14 TR = 17 J. Pouiller Temps Réel 158 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Priorité plafonnée On a le même critère d ordonnancabilité par RM que dans le cas du protocole d héritage de priorité : ( ) i tasks, k + ( ) i i 2 1 i 1 T k T i k tasks et le même calcul du temps de réponse : TRi TR i = i + i + j T P j >P i j mais le calcul du temps de blocage maximum de chaque tâche est plus simple : on peut démontrer que le temps de bloquage maximum i d une tâche i est la durée de la plus longue des sections critiques (maxs j,k ) parmi celles appartenant à des tâches de priorité inférieure à P i et gardées par des sémaphores dont la priorité plafond est supérieure ou égale à P i i = maxs j,k P j < P i,(s k ) P i J. Pouiller Temps Réel 159 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Sémaphore ifférence entre un mutex et un semaphore binaire : presque aucune. Parfois le sémaphore binaire est utilisé pour implémentéer le mutex. Toutefois, d un point de vue sémantique, on pourrait que le mutex permet d avoir un morceau de code mutuelement exclusif tandis que le sémaphore est une section de code limité à uen 1 ressource. J. Pouiller Temps Réel 160 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Mutex Réentrant Idem mutex, mais si la même tâche tente de revérouiller le même mutex, le mutex est non-bloquant. ans le cas d un mutex non-réentrant, ceci entraine forcement un dead-lock. Un sémaphore est maintenu pour connaitre le nombre de passage. J. Pouiller Temps Réel 161 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Read/Write Lock Permet de limiter le phénomène de latence en dimiminuant le nombre de sections critiques. Solution 1 (reader preference) : void read_lock() { // mutex protege read_count lock(mutex); readcount++; if (readcount == 1) lock(w); unlock(mutex); 8 } void read_unlock() { 2 lock(mutex); readcount--; if (readcount = 0) unlock(w); unlock(mutex); } void write_lock() { lock(w); } void write_unlock() { 12 unlock(w); } J. Pouiller Temps Réel 162 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Read/Write Lock Problème : un accès en écriture doit attendre que toutes les lectures soient terminées. Solution 2 (writer preference) : void read_lock() { lock(r); lock(mutex); readcount++; if (readcount == 1) lock(w); 7 unlock(mutex); unlock(r); // r n est pas bloque durant la lecture } void read_unlock() { lock(mutex); readcount--; if (readcount == 0) unlock(w); unlock(mutex); } void write_lock() { lock(r); 10 lock(w); } void write_unlock() { unlock(w); unlock(r); } J. Pouiller Temps Réel 163 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Rendez-vous Permet de synchroniser deux tâches. La première tâche arrivée à la barrière attend la seconde. void init() { lock(m1); lock(m2); } Tâche 1 : unlock(m1); lock(m2); Tâche 2 : unlock(m2); lock(m1); J. Pouiller Temps Réel 164 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis onditions Peuvent être considérés comme des rendez-vous à sens unique. Si une tâche attend, elle est débloquée, sinon, aucun effet. Très utilisée pour le pattern des work-thread 8 void init() { lock(m); } void wait() { lock(m); } void signal() { unlock(m); try_lock(m); } // broadcast debloque // tous les waiters alors // que signal en debloque // uniquement un void broadcast() { // Plus complexe, il // faut un mutex par 8 // waiters. } J. Pouiller Temps Réel 165 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis uffer circulaire et Queue Précédement décrit dans la section Partage d information avec les interruptions Fonctionne aussi très bien entre les tâches Une des rare structure permettant d être partagée à la fois avec une interruption et des tâches Faire attention à l allocation dynamique des objets J. Pouiller Temps Réel 166 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Spin Lock, Mutex et désactivation des interruptions Lorsque : Vos sections critique font intervenir des tâches et des interruptions Votre problème ne concerne pas un échange de données (et donc le buffer circulaire n est pas une solution) Vous ne pouvez pas faire autrement alors, vous devez combiner les trois mécanismes suivants : ésactivation des interruptions, Mutex et Spin Lock. Le point sur ces trois mécanismes : Si une ressource est partagé entre une tâche et une interruption sur le même coeur, il est nécessaire de désactiver les interruptions Si une ressource est partagé entre deux tâche sur un même coeur, il est nécessaire d utiliser un mutex Si la ressource est partagée avec un autre coeur et que le temps d utilisation est court, utilisez un Spin Lock. J. Pouiller Temps Réel 167 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Spin Lock, Mutex et désactivation des interruptions On pourrait imaginer un cas cummulant les trois contraintes : 1 disable_interrupts() mutex_lock(m) spin_lock(s) a++ spin_unlock(s) mutex_unlock(m) enable_interrupts() Globalement, évitez! J. Pouiller Temps Réel 168 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis lgorithmes non-bloquants lgorithme thread-safe n utilisant pas de sections ciritques. es algorithmes utilisent souvant des instructions atomiques proposés par certains processeurs Par conséquant, ils sont peu portables Souvent utilisé dans les base de données J. Pouiller Temps Réel 169 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Read-opy-Update (RU) Type d algorithme non bloquant : La lecture n est pas bloquante On note le nombre de lecteurs Les modification s effectuent sur une copie de l objet Les lecture suivante se font sur la nouvelle version de l objet Lorsque le dernier lecteur a terminé, l objet d origine est détruit. Seul subsiste la nouvelle version. J. Pouiller Temps Réel 170 / 197

Ordonnancement avec contraintes de précédance Problèmatique des accès concurents Problème liés aux partage de ressources Solutions utres mécanis Exemple : Manipulation de listes typedef struct { struct a_t a; int count_usage = 0; bool obsolete = false; } rcu_t; rcu_t *a = malloc(sizeof(rcu_t)); void read_a() { // lock: rcu_t *ptr = a; ptr->count_usage++; // do something with ptr; // unlock: ptr->count_usage--; if (ptr->obsolete &&!ptr-> count_usage) free(ptr); } void write_a() { struct rcu_t *a3 = a; struct rcu_t *a2 = malloc( sizeof(rcu_t)); memcpy(a2, a); // modify a2; a = a2; a3->obsolete = true; if (!a3->count_usage) free(ptr); } J. Pouiller Temps Réel 171 / 197