Concept

Inversion de priorité

Résumé
L'inversion de priorité est un phénomène qui peut se produire en programmation concurrente. Il s'agit d'une situation dans laquelle un processus de haute priorité ne peut pas avoir accès au processeur car il est utilisé par un processus de plus faible priorité. Pour les exemples, nous utiliseront des tâches A, B, et C, A ayant la plus forte priorité, C la plus faible, et B une priorité intermédiaire, et un mutex X qui sert à gérer une ressource partagée entre la tâche A et la tâche C. Le premier exemple d'inversion de priorité est le plus simple: il ne fait intervenir que les tâches A et C et le mutex X. Par exemple, avec la séquence d'opération suivante : La tâche C (de basse priorité) acquiert le mutex X. Un événement réveille la tâche A (de forte priorité), qui préempte la tâche C. Cette dernière n'a pas libéré le mutex X. La tâche A essaye d'obtenir le mutex ; comme il est déjà acquis par la tâche C, la tâche A est donc mise en attente. La tâche de haute priorité n'a donc pas accès à la ressource processeur mais une tâche de basse priorité y a accès. Ce premier cas est souvent bien maîtrisé par les développeurs, car c'est à cela que sert un mutex: s'assurer qu'une seule tâche accède à la ressource à un instant donné. La solution consiste simplement à libérer le mutex le plus vite possible dans la tâche C. L'inversion de priorité devient problématique lorsque l'on fait intervenir la troisième tâche de priorité intermédiaire. La tâche C s'exécute, et prend le mutex X. Un événement réveille la tâche B, qui préempte la tâche C. Cette dernière n'a pas libéré le mutex X. Un autre événement réveille la tâche A, qui préempte la tâche B. Mais quand elle demande à prendre le mutex X, elle est mise en attente, et la tâche B continue de s'exécuter. Il en résulte une inversion des priorités, la tâche B continuant de s'exécuter jusqu'à son terme, puis C, et enfin A : la tâche de plus haute priorité s'exécute en dernier ! Ce deuxième exemple est plus difficile a anticiper et à appréhender, car la tâche B bloque la tâche A alors qu'elles ne partagent aucune ressource.
À propos de ce résultat
Cette page est générée automatiquement et peut contenir des informations qui ne sont pas correctes, complètes, à jour ou pertinentes par rapport à votre recherche. Il en va de même pour toutes les autres pages de ce site. Veillez à vérifier les informations auprès des sources officielles de l'EPFL.