Exclusion mutuelle - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs est disponible ici.

Un Mutex (anglais : Mutual exclusion, Exclusion mutuelle) est une primitive de synchronisation utilisée en programmation informatique pour éviter que des ressources non partagées d'un système ne soient utilisées en même temps (Le temps est un concept développé par l'être humain pour appréhender le...). Son implémentation (Le mot implantation peut avoir plusieurs significations :) varie selon les systèmes (masquage des interruptions, lecture/écriture en un cycle, etc.)

Ces algorithmes permettent de réguler l'accès aux données (Dans les technologies de l'information (TI), une donnée est une description élémentaire, souvent...), par exemple pour qu'une routine ne s'exécute qu'une seule fois.

Certains algorithmes utilisent un état pour commander l'exécution : les mutex (Un Mutex (anglais : Mutual exclusion, Exclusion mutuelle) est une primitive de synchronisation...) doivent savoir si les programmes concernés sont occupés (busy) ou s'ils ont terminé et sont en attente (wait). De tels algorithmes sont par exemple :

  • l'algorithme de Dekker ;
  • l'algorithme de Peterson ;

La plupart des mutex ont des effets secondaires, par exemple les sémaphores (mutex avec un compteur) qui peuvent bloquer l'exécution, créer des goulets d'étranglement, voire ne pas remplir leur rôle en permettant tout (Le tout compris comme ensemble de ce qui existe est souvent interprété comme le monde ou...) de même l'accès aux données protégées. Un autre effet est le blocage total ( Total est la qualité de ce qui est complet, sans exception. D'un point de vue comptable, un...) des ressources, si le programme qui les utilisait n'a pas informé le système qu'il n'en avait plus besoin (Les besoins se situent au niveau de l'interaction entre l'individu et l'environnement. Il est...).

On ne connait pas, aujourd'hui, d'algorithme parfait - ils sont tous faillibles dans des conditions données.

Interblocage

Problèmes classiques des
méthodes de synchronisation

Couplage fort - Famine

Interblocage - Inversion de priorité

L'interblocage (de l'anglais deadlock) est un risque important puisqu'il fait entrer le programme dans une boucle infinie (En programmation informatique, une boucle infinie désigne une boucle dont la condition de...). Ce phénomène est aussi appelé boucle létale.

Il se produit lorsque un mutex M1 demande l'accès à une ressource R2, déjà réservée par le mutex M2. Or celui-ci attend sur une ressource R1 qui est bloquée par le mutex M1. Les deux mutex s'attendent mutuellement et ne peuvent sortir de cette situation (En géographie, la situation est un concept spatial permettant la localisation relative d'un...).

Plusieurs méthodes existent pour les éviter :

  • élimination lors de la conception par une analyse détaillée des algorithmes
  • système préventif qui détecte un risque de deadlock avant que celui-ci ne se produise durant l'exécution
  • système de récupération si un deadlock se produit, le système doit pouvoir repartir dans un état valide

Le deadlock ne se limite pas qu'aux primitives de synchronisation comme les mutex, il peut également survenir lors d'inversions de priorité dans le cadre de l'ordonnancement des tâches.

Un problème concret : Mars Pathfinder

En 1997, la mission Mars Pathfinder rencontre un problème alors que le robot (Un robot est un dispositif mécatronique (alliant mécanique, électronique et...) est déjà sur Mars. Après un certain temps, des données sont systématiquement perdues. Les ingénieurs découvrent alors un bogue lié à la synchronisation de plusieurs tâches. Les éléments incriminés étaient les suivants :

  • une mémoire partagée (Dans un contexte de la programmation concurrente, la mémoire partagée désigne un...) était protégée par un mutex
  • une gestion de bus sur la mémoire (D'une manière générale, la mémoire est le stockage de l'information. C'est aussi le souvenir...) partagée, cette routine avait une grande priorité
  • une écriture en mémoire partagée (récupération de données), cette écriture avait la priorité la plus basse
  • une troisième routine de communication (La communication concerne aussi bien l'homme (communication intra-psychique, interpersonnelle,...), avec une priorité moyenne (La moyenne est une mesure statistique caractérisant les éléments d'un ensemble de...) qui ne touchait pas à la mémoire partagée

Il arrivait parfois que l'écriture (priorité faible) s'approprie le mutex. La gestion du bus (priorité haute) attendait sur ce mutex. La commutation de tâches laissait alors la routine de communication (priorité moyenne) s'exécuter. Or pendant ce temps, le mutex restait bloqué puisque les ressources étaient allouées à la routine de priorité moyenne. La gestion de bus ne pouvait donc plus s'exécuter et après un certain temps d'attente (une protection insérée par les ingénieurs via un chien (Le chien (Canis lupus familiaris) est un mammifère domestique de la famille des canidés,...) de garde), le système effectuait un redémarrage. Un tel problème est connu sous le nom d'inversion de priorité.

Le code fut corrigé à distance le problème n'étant pas critique mais dans d'autres situations, le résultat aurait pu être catastrophique. Il s'est avéré par la suite que le problème était déjà survenu lors des essais sans avoir été corrigé.

Page générée en 0.041 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales | Partenaire: HD-Numérique
Version anglaise | Version allemande | Version espagnole | Version portugaise