Sémaphore à héritage de priorité

Un article de Wikipédia, l'encyclopédie libre.

Le sémaphore à héritage de priorité est une variable utilisée en informatique destinée à éviter l'inversion de priorité.

Protocole de fonctionnement[modifier | modifier le code]

Soient trois tâches :

  • Th : tâche avec une haute priorité
  • Tm : tâche avec une priorité moyenne
  • Tl : tâche avec une priorité faible

Une tâche Th sur le point d’entrer dans une section critique se bloque lorsque :

  • Une autre tâche Tl a déjà verrouillé cette section critique (Tl héritera de la priorité de Th).
  • Une tâche plus prioritaire est lancée.

Une tâche Tl entre dans une section critique :

  • Elle bloque le sémaphore.
  • Elle se bloque lorsqu’une tâche plus prioritaire est lancée.

Lorsqu’une tâche sort d’une section critique :

  • Elle reprend sa priorité de départ.
  • Elle libère le verrou sur le sémaphore.
  • S’il y a des tâches bloquées sur ce sémaphore, la plus prioritaire se lancera.

On peut définir le plafond de priorité (priority ceiling) comme étant la priorité maximale des tâches pouvant prendre le sémaphore.

Avantages[modifier | modifier le code]

L'héritage de priorité permet de résoudre le problème d’interblocage en garantissant qu’une tâche ne peut exécuter une section critique que si elle s’exécute à un niveau de priorité supérieur aux niveaux de priorité des sections critiques préemptées.

Méthode du verrou le plus haut (Highest lock)[modifier | modifier le code]

La tâche qui utilise le sémaphore hérite d’une priorité supérieure au plafond de priorité du sémaphore. Cette méthode est simple à mettre en œuvre mais rallonge les périodes d’inversion de priorité.

Méthode du plafond de priorité (PCP)[modifier | modifier le code]

Le SE maintient une variable : valeur maximale ou plafond courant. Une tâche qui essaie d’exécuter une section critique est suspendue sauf si sa priorité est supérieure aux plafonds de priorités de tous les sémaphores pris par les autres tâches. La mise en œuvre complexe.