Qu’est-ce que le Sémaphore ? Comptage, types binaires avec exemple

Qu'est-ce que Sémaphore ?

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 thread qui attend un sémaphore peut être signalé par un autre thread. Il utilise deux atomOpérations magiques, 1) Attendre et 2) Signaler le processus synchronisation.

Un sémaphore autorise ou interdit l'accès à la ressource, selon la manière dont elle est configurée.

Caractéristique du sémaphore

Voici les caractéristiques d'un sémaphore :

  • C'est un mécanisme qui peut être utilisé pour fournir synchonorisation des tâches.
  • C'est un niveau bas syncmécanisme de hronisation.
  • Le sémaphore contiendra toujours une valeur entière non négative.
  • Le sémaphore peut être implémenté à l'aide d'opérations de test et d'interruptions, qui doivent être exécutées à l'aide de descripteurs de fichiers.

Types de sémaphores

Les deux types courants de sémaphores sont

  • Compter les sémaphores
  • Sémaphores binaires.

Compter les sémaphores

Ce type de sémaphore utilise un décompte qui permet à la tâche d'être acquise ou libérée plusieurs fois. Si le décompte initial = 0, le sémaphore de comptage doit être créé dans l'état indisponible.

Compter les sémaphores
Compter les sémaphores

Cependant, si le nombre est > 0, le sémaphore est créé dans l'état disponible et le nombre de jetons dont il dispose est égal à son nombre.

Sémaphores binaires

Les sémaphores binaires sont assez similaires aux sémaphores compteurs, mais leur valeur est limitée à 0 et 1. Dans ce type de sémaphore, l'opération d'attente ne fonctionne que si le sémaphore = 1, et l'opération de signal réussit lorsque le sémaphore = 0. Il est facile de mettre en œuvre que de compter les sémaphores.

Sémaphores binaires

Sémaphores binaires

Exemple de sémaphore

Le programme ci-dessous est une implémentation étape par étape, qui implique l'utilisation et la déclaration du sémaphore.

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

Opérations d'attente et de signal dans les sémaphores

Ces deux opérations sont utilisées pour mettre en œuvre processus synchronisation. Le but de cette opération sémaphore est d’obtenir une exclusion mutuelle.

Attendre l'opération

Ce type d'opération de sémaphore vous aide à contrôler l'entrée d'une tâche dans la section critique. Cependant, si la valeur de wait est positive, alors la valeur de l'argument wait X est décrémentée. En cas de valeur négative ou nulle, aucune opération n'est exécutée. On l'appelle également opération P(S).

Une fois la valeur du sémaphore diminuée, qui devient négative, la commande est maintenue jusqu'à ce que les conditions requises soient satisfaites.

Copy CodeP(S)
{ 
    while (S<=0);
    S--;
}

Fonctionnement des signaux

Ce type d'opération Sémaphore est utilisé pour contrôler la sortie d'une tâche d'une section critique. Cela permet d'augmenter la valeur de l'argument de 1, ce qui est noté V(S).

Copy CodeP(S)
{ 
    while (S>=0);
    S++;
}

Comptage du sémaphore par rapport au sémaphore binaire

Voici quelques différences majeures entre le comptage et le sémaphore binaire :

Compter le sémaphore Sémaphore binaire
Pas d'exclusion mutuelle Exclusion mutuelle
Toute valeur entière Valeur uniquement 0 et 1
Plus d'un emplacement Un seul emplacement
Fournir un ensemble de processus Il dispose d’un mécanisme d’exclusion mutuelle.

Différence entre sémaphore et mutex

Paramètres Sémaphore mutex
Mécanisme C'est un type de mécanisme de signalisation. C'est un mécanisme de verrouillage.
Type de données Le sémaphore est une variable entière. Mutex n'est qu'un objet.
Modification Les opérations wait et signal peuvent modifier un sémaphore. Il n'est modifié que par le processus susceptible de demander ou de libérer une ressource.
La gestion des ressources Si aucune ressource n'est libre, alors le processus nécessite une ressource qui doit exécuter l'opération d'attente. Il doit attendre que le nombre du sémaphore soit supérieur à 0. S'il est verrouillé, le processus doit attendre. Le processus doit être maintenu dans une file d'attente. Il faut y accéder uniquement lorsque le mutex est déverrouillé.
Fil à coudre Vous pouvez avoir plusieurs threads de programme. Vous pouvez avoir plusieurs threads de programme dans mutex mais pas simultanémentneousuellement.
La propriété La valeur peut être modifiée par n'importe quel processus libérant ou obtenant la ressource. Le verrouillage d'un objet est libéré uniquement par le processus qui a obtenu le verrou sur celui-ci.
Types Les types de sémaphore comptent le sémaphore et le sémaphore binaire et Mutex n'a pas de sous-types.
Opération La valeur du sémaphore est modifiée à l'aide des opérations wait() et signal(). L'objet Mutex est verrouillé ou déverrouillé.
Occupation des ressources Il est occupé si toutes les ressources sont utilisées et que le processus demandant la ressource effectue l'opération wait () et se bloque jusqu'à ce que le nombre de sémaphores devienne >1. Si l'objet est déjà verrouillé, le processus demandant des ressources attend et est mis en file d'attente par le système avant que le verrou ne soit libéré.

Avantages des sémaphores

Voici les avantages/avantages de l’utilisation de Semaphore :

  • Il permet à plusieurs threads 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 micronoyau.
  • Ils ne permettent pas à plusieurs processus d'entrer dans la section critique.
  • Comme il y a beaucoup d'attente dans le sémaphore, il n'y a jamais de perte de temps et de ressources.
  • Ils sont indépendants de la machine et 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

Voici les inconvénients/inconvénients du sémaphore

  • L'une des plus grandes limitations d'un sémaphore est l'inversion des priorités.
  • Le système d'exploitation doit garder une trace de tous les appels à attendre et signaler le sémaphore.
  • Leur utilisation n’est jamais imposée, mais uniquement par convention.
  • Afin d'éviter deadlockComme dans le sémaphore, les opérations Wait et Signal doivent être exécutées dans le bon ordre.
  • La programmation des sémaphores est compliquée, il y a donc des chances de ne pas parvenir à une exclusion mutuelle.
  • Ce n’est pas non plus une méthode pratique pour une utilisation à grande échelle car son utilisation entraîne une perte de modularité.
  • Le sémaphore est plus sujet aux erreurs du programmeur.
  • Cela peut causer deadlock ou violation de l'exclusion mutuelle en raison d'une erreur du programmeur.

Résumé

  • Le sémaphore est défini comme une variable non négative et partagée entre les threads.
  • C'est un mécanisme qui peut être utilisé pour fournir synchonorisation des tâches.
  • Le sémaphore de comptage utilise un décompte qui permet à la tâche d'être acquise ou libérée plusieurs fois.
  • Les sémaphores binaires sont assez similaires aux sémaphores de comptage, mais leur valeur est limitée à 0 et 1.
  • L'opération d'attente vous aide à contrôler l'entrée d'une tâche dans la section critique
  • L'opération de sémaphore de signal est utilisée pour contrôler la sortie d'une tâche d'une section critique
  • Le sémaphore de comptage n'a pas d'exclusion mutuelle alors que le sémaphore binaire a une exclusion mutuelle
  • Sémaphore signifie un mécanisme de signalisation alors que Mutex est un mécanisme de verrouillage
  • Le sémaphore permet à plusieurs threads d'accéder à la section critique
  • L'une des plus grandes limitations d'un sémaphore est l'inversion des priorités.