Mutex vs Sémaphore

Selon la terminologie du système d’exploitation, mutex et sémaphores sont des ressources du noyau qui fournissent des services de synchronisation, également appelés primitives de synchronisation. La synchronisation des processus joue un rôle important dans le maintien de la cohérence des données partagées. Les solutions logicielles et matérielles sont présentes pour gérer les problèmes de section critiques. Mais les solutions matérielles pour les problèmes de section critiques sont assez difficiles à mettre en œuvre. Mutex et sémaphore fournissent tous deux des services de synchronisation, mais ils ne sont pas les mêmes.

Qu’est-ce que le Mutex ?

Mutex est un objet d’exclusion mutuelle qui synchronise l’accès à une ressource. Il est créé avec un nom unique au début d’un programme. Le mécanisme de verrouillage mutex garantit qu’un seul thread peut acquérir le mutex et entrer dans la section critique. Ce thread ne libère le mutex que lorsqu’il se termine dans la section critique.

 Mutex vs Sémaphore

C’est un type spécial de sémaphore binaire utilisé pour contrôler l’accès à la ressource partagée. Il comprend un mécanisme d’héritage de priorité pour éviter les problèmes d’inversion de priorité étendue. Il permet aux tâches prioritaires actuelles d’être maintenues à l’état bloqué pendant le temps le plus court possible. Cependant, l’héritage de priorité ne corrige pas l’inversion de priorité mais minimise seulement son effet.

Exemple

Ceci est montré à l’aide de l’exemple suivant,

Utilisation de Mutex

Un mutex fournit une exclusion mutuelle, producteur ou consommateur qui peut avoir la clé (mutex) et poursuivre son travail. Tant que le producteur remplit le tampon, l’utilisateur doit attendre, et vice versa. Dans Mutex lock, tout le temps, un seul thread peut fonctionner avec l’ensemble du tampon.

Lorsqu’un programme démarre, il demande au système de créer un objet mutex pour une ressource donnée. Le système crée l’objet mutex avec un nom ou un identifiant unique. Chaque fois que le thread du programme veut utiliser la ressource, il occupe le verrou sur l’objet mutex, utilise la ressource et après utilisation, il libère le verrou sur l’objet mutex. Ensuite, le processus suivant est autorisé à acquérir le verrou sur l’objet mutex.

Pendant ce temps, un processus a acquis le verrou sur l’objet mutex, et aucun autre thread ou processus ne peut accéder à cette ressource. Si l’objet mutex est déjà verrouillé, le processus souhaitant acquérir le verrou sur l’objet mutex doit attendre et est mis en file d’attente par le système jusqu’à ce que l’objet mutex soit déverrouillé.

Avantages du Mutex

Voici les avantages suivants du mutex, tels que:

  • Mutex n’est que de simples verrous obtenus avant d’entrer dans sa section critique puis de la libérer.
  • Comme un seul thread se trouve dans sa section critique à un moment donné, il n’y a pas de conditions de concurrence et les données restent toujours cohérentes.

Inconvénients du Mutex

Le Mutex présente également certains inconvénients, tels que:

  • Si un thread obtient un verrou et se met en veille ou est préempté, l’autre thread peut ne pas avancer. Cela peut conduire à la famine.
  • Il ne peut pas être verrouillé ou déverrouillé dans un contexte différent de celui qui l’a acquis.
  • Un seul thread doit être autorisé dans la section critique à la fois.
  • L’implémentation normale peut conduire à un état d’attente occupé, ce qui gaspille du temps CPU.

Qu’est-ce que le sémaphore ?

Le sémaphore est simplement une variable non négative et partagée entre les threads. Un sémaphore est un mécanisme de signalisation, et un autre thread peut signaler un thread qui attend sur un sémaphore.

 Mutex vs Sémaphore

Un sémaphore utilise deux opérations atomiques,

1. Wait : L’opération wait décrémente la valeur de son argument S s’il est positif. Si S est négatif ou nul, aucune opération n’est effectuée.

2. Signal pour la synchronisation du processus : L’opération signal incrémente la valeur de son argument S.

Un sémaphore autorise ou refuse l’accès à la ressource, selon la façon dont elle est configurée.

Utilisation du sémaphore

Dans le cas d’un seul tampon, on peut séparer le tampon de 4 Ko en quatre tampons de 1 Ko. Le sémaphore peut être associé à ces quatre tampons, ce qui permet aux utilisateurs et aux producteurs de travailler simultanément sur différents tampons.

Types de Sémaphore

Le sémaphore se distingue par le système d’exploitation en deux catégories Comptant le sémaphore et le sémaphore binaire.

1. Sémaphore de comptage : La valeur du sémaphore S est initialisée au nombre de ressources présentes dans le système. Chaque fois qu’un processus veut accéder à la ressource, il effectue l’opération wait() sur le sémaphore et décrémente la valeur du sémaphore d’un. Lorsqu’il libère la ressource, il effectue l’opération signal() sur le sémaphore et incrémente la valeur du sémaphore d’un.

Lorsque le nombre de sémaphores passe à 0, cela signifie que les processus occupent toutes les ressources. Un processus doit utiliser une ressource lorsque le nombre de sémaphores est égal à 0. Il exécute l’opération wait() et est bloqué jusqu’à ce que la valeur du sémaphore devienne supérieure à 0.

 Mutex vs Sémaphore

2. Sémaphore binaire : La valeur d’un sémaphore est comprise entre 0 et 1. Il est similaire au verrouillage mutex, mais mutex est un mécanisme de verrouillage, tandis que le sémaphore est un mécanisme de signalisation. Dans le sémaphore binaire, si un processus veut accéder à la ressource, il effectue l’opération wait() sur le sémaphore et décrémente la valeur du sémaphore de 1 à 0. Lorsqu’il libère la ressource, il effectue une opération signal() sur le sémaphore et incrémente sa valeur à 1. Supposons que la valeur du sémaphore soit 0 et qu’un processus souhaite accéder à la ressource. Dans ce cas, il effectue l’opération wait() et se bloque jusqu’à ce que le processus en cours utilisant les ressources libère la ressource.

 Mutex vs Sémaphore

Avantages du Sémaphore

Voici les avantages suivants du sémaphore, tels que:

  • Il permet à plus d’un thread d’accéder à la section critique.
  • Les sémaphores sont indépendants de la machine.
  • Les sémaphores sont implémentés dans le code indépendant de la machine du micro-noyau.
  • Ils ne permettent pas à plusieurs processus d’entrer dans la section critique.
  • Comme le sémaphore est occupé et en attente, il n’y a jamais de gaspillage de temps et de ressources de processus.
  • Ils sont indépendants de la machine, qui doivent être exécutés dans le code indépendant de la machine du micro-noyau.
  • Ils permettent une gestion flexible des ressources.

Inconvénient des sémaphores

Les sémaphores présentent également certains inconvénients, tels que:

  • L’une des plus grandes limitations d’un sémaphore est l’inversion de priorité.
  • Le système d’exploitation doit suivre tous les appels à attendre et signaler le sémaphore.
  • Leur utilisation n’est jamais appliquée, mais c’est uniquement par convention.
  • Les opérations d’attente et de signal doivent être exécutées dans le bon ordre pour éviter les blocages dans le sémaphore.
  • La programmation du sémaphore est une méthode complexe, il y a donc des chances de ne pas atteindre l’exclusion mutuelle.
  • Ce n’est pas non plus une méthode pratique pour une utilisation à grande échelle car leur utilisation entraîne une perte de modularité.
  • Le sémaphore est plus sujet aux erreurs du programmeur
  • , et il peut provoquer un blocage ou une violation de l’exclusion mutuelle due à une erreur du programmeur.

Différence entre le Mutex et le Sémaphore

La différence fondamentale entre le sémaphore et le mutex est que le sémaphore est un mécanisme de signalisation, c’est-à-dire que les processus exécutent les opérations wait() et signal() pour indiquer s’ils acquièrent ou libèrent la ressource. En revanche, un mutex est un mécanisme de verrouillage, et le processus doit acquérir le verrou sur un objet mutex s’il veut acquérir la ressource. Voici quelques autres différences entre sémaphore et mutex, telles que:

 Mutex vs Sémaphore

Termes Mutex Sémaphore
Définition Le mutex est un mécanisme de verrouillage, car pour acquérir une ressource, un processus doit verrouiller l’objet mutex, et tout en libérant un processus de ressource doit déverrouiller l’objet mutex. Le sémaphore est un mécanisme de signalisation car les opérations wait() et signal() effectuées sur la variable sémaphore indiquent si un processus acquiert ou libère la ressource.
Existence Un mutex est un objet. Le sémaphore est une variable entière.
Function Mutex permet à plusieurs threads de programmes d’accéder à une seule ressource, mais pas simultanément. Le sémaphore permet à plusieurs threads de programme d’accéder à une instance finie de ressources.
Ownership Le verrou d’objet Mutex n’est libéré que par le processus qui a acquis le verrou sur l’objet mutex. La valeur du sémaphore peut être modifiée par n’importe quel processus acquérant ou libérant la ressource en effectuant les opérations wait() et signal().
Catégoriser Le Mutex n’est pas classé plus loin. Le sémaphore peut être classé en sémaphore de comptage et sémaphore binaire.
Opération L’objet mutex est verrouillé ou déverrouillé par le processus de demande ou de libération de la ressource. La valeur du sémaphore est modifiée à l’aide des opérations wait() et signal() en dehors de l’initialisation.
Ressources occupées Si un objet mutex est déjà verrouillé, le processus souhaitant acquérir une ressource attend et est mis en file d’attente par le système jusqu’à ce que la ressource soit libérée et que l’objet mutex soit déverrouillé. Supposons que le processus acquiert toutes les ressources et qu’aucune ressource n’est libre. Dans ce cas, le processus souhaitant acquérir une ressource effectue l’opération wait() sur la variable sémaphore et se bloque jusqu’à ce que le nombre de sémaphores devienne supérieur à 0.

Leave a Reply