Critère d’ordonnancement en temps réel Partie III Systèmes en temps réel Critère d’ordonnancement en temps réel Partie III
Synopsis Revue ordonnancement - Parties I & II Indépendance des tâches Inversion de la priorité Héritage de la priorité et ordonnancement Temps de blocage Protocoles d’héritage de priorité plafond (Ceiling Priority Inheritance) Protocole de priorité plafond original Protocole de priorité plafond immédiat Exercice 6 Ordonnancement (partie 3) - 2
Revue Partie I Partie II Mécanismes d’ordonnancement 2 composantes Assume un modèle de tâches simple RMA et le théorème des bornes d’utilisation Partie II Analyse du temps de réponse et interférence Ordonnancement des tâches apériodiques Ordonnancement priorité avec échéancier monotone DMPO Ordonnancement (partie 3) - 3
Indépendance des tâches La supposition que les tâches sont indépendantes n’est pas raisonnable pour tout système valable Les tâches partagent normalement des ressources communes avec des sémaphores et moniteurs Les tâches doivent se synchroniser souvent Ceci implique que les tâches peuvent être suspendues en attendant un événement futur qui dépend sur une ou plusieurs autres tâches Quand est-ce que cette dépendance va affecter le critère d’ordonnancement? Ordonnancement (partie 3) - 4
Inversion de priorité Peut se produire quand une tâche de haute priorité et une tâche de basse priorité partagent une ressource commune La tâche de basse priorité obtient l’accès exclusif à la ressource partagée La tâche de plus haute priorité cause la préemption de la tâche de plus basse priorité mais se fait bloquer en attendant que la ressource soit relâchée Entre temps une tâche de priorité médiane cause encore la préemption de la tâche de basse priorité, ce qui délais encore plus l’exécution de la tâche de haute priorité Parce que la tâche médiane se voit garantir un service de priorité par dessus la tâche de plus haute priorité qui est bloquée => inversion de priorité Ordonnancement (partie 3) - 5
Inversion de priorité illustrée basse médiane haute (1) (2) (3) (4) (5) (6) (7) (8) Temps (9) (10) (11) Tâche de basse priorité barre ressource partagée Tâche à haute priorité bloque en attendant le relâchement de la ressource La tâche médiane cause la préemption de la tâche à basse (et haute) priorité Ordonnancement (partie 3) - 6
Héritage de la priorité et ordonnancement L’héritage de la priorité simple est une technique pour prévenir l’inversion de priorité La priorité d’une tâche qui obtient l’accès à une ressource partagée, hérite dynamiquement de la priorité de la tâche de plus haute priorité qui partage cette ressource théorème : si on emploie l’héritage de priorité, le nombres de fois qu’une tâche peut être bloquée par une tâche de priorité inférieure est le minimum entre: K – le nombre de sections critique bloquante; ou N – le nombre de tâches à priorité inférieure Ordonnancement (partie 3) - 7
Temps de blocage À partir du théorème, le temps de blocage de la tâche i est définit comme étant -> Bi = utilisation(k, i ) CS(k) (1) où utilisation(k, i) = 1 si la ressource k est utilisée par au moins une tâche de priorité < i et au moins une tâche (incluant i) de priorité i = 0 autrement et CS(k) = coût d’exécution de la section critique k K k=1 Ordonnancement (partie 3) - 8
Temps de blocage De l’équation (1) nous obtenons un temps de réponse plus général pour la tâche i: Ri = Ci + Bi + Ii (2) ou Rin = Ci + Bi + Rin-1/Tj Cj pour n > 1 Nous avons encore le cas spécial Ri0 = Ci Malgré que l’emploie de l’héritage de priorité simple va limiter le nombre de blocages qu’une tâche peut souffrir, cela ne prévient pas le blocage transitif ou les interblocages jhp(i) Ordonnancement (partie 3) - 9
Protocole de priorité plafond original Chaque tâche a une priorité statique par défaut Chaque ressource a une valeur plafond statique, égale à la priorité maximum des tâches qui l’utilisent Chaque tâche a une priorité dynamique, égale au maximum de sa propre priorité statique et toute priorité héritée dû au blocage de tâches de plus hautes priorités Une tâche peut seulement barrer une ressource si sa priorité dynamique est supérieure au plafond de toutes les ressources couramment barrées (excluant bien sure celles que cette tâche a barrée) Ordonnancement (partie 3) - 10
Protocole de priorité plafond immédiat Chaque tâche est assignée une priorité statique par défaut (en utilisant une méthode quelconque – peut être DMPO) Chaque ressource a une valeur statique plafond, égale au maximum de la priorité des tâches qui l’utilisent Chaque tâche possède aussi une priorité dynamique, égale au maximum de sa propre priorité statique et des valeurs plafonds des ressources qu’elle a barrée ICPP advantages: - easier to implement - leads to fewer context switches ICPP disadvantages: - requires more priority movements Ordonnancement (partie 3) - 11
Protocoles de priorité plafond Éliminent les interblocages Si une tâche tient une ressource et en demande une autre, alors le plafond de la deuxième ressource ne peut pas être plus bas que le plafond de la première Éliminent le blocage transitif En effet, pour toute tâche seulement UN événement de blocage peut se produire, donc On utilise une équation de temps de blocage modifiée: Bi = max {utilisation(k, i ) CS(k) } (3) K k=1 Ordonnancement (partie 3) - 12
Exercice ordonnancement - cas 1 Tâche Ci Ti Di k CS(k) tâche util 1 3 25 7 1 2 1,3,4 2 2 12 - 2 4 2,4 3 5 17 - 4 6 24 - Utilisez DMPO Employez l’héritage de priorité simple Déterminez l’ordonnancement des tâches Ordonnancement (partie 3) - 13
Exercice ordonnancement - cas 2 Tâche Ci Ti Di k CS(k) tâche util 1 3 25 7 1 2 1,3,4 2 2 12 - 2 4 2,4 3 5 17 - 4 6 24 - Utilisez DMPO Employez PPPI Déterminez l’ordonnancement des tâches Ordonnancement (partie 3) - 14
Références [1] Burns, A. and Wellings, A., “Real-Time Systems and Programming Languages”, Chapter 13, Addison Wesley, 1997 [2] Gomaa, H., “Software Design Methods for Concurrent and Real-Time Systems”, Addison-Wesley, 1993. Ordonnancement (partie 3) - 15