Qu’est ce qu' Semaphore? Comptage, types binaires avec exemple

Qu’est ce qu' Semaphore?

Semaphore 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 opérations atomiques, 1) Attendre et 2) Signal pour la synchronisation des processus.

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

Caractéristique de Semaphore

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

  • C'est un mécanisme qui peut être utilisé pour assurer la synchronisation des tâches.
  • Il s'agit d'un mécanisme de synchronisation de bas niveau.
  • Semaphore contiendra toujours une valeur entière non négative.
  • Semaphore 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 d' Semaphores

Les deux types courants de sémaphores sont

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

Compte Semaphores

Ce type d’ Semaphore utilise un compteur qui permet d'acquérir ou de libérer la tâche plusieurs fois. Si le compteur initial = 0, le sémaphore de comptage doit être créé dans l'état indisponible.

Compte Semaphores
Compte Semaphores

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.

binaire Semaphores

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.

binaire Semaphores

binaire Semaphores

Exemple de Semaphore

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;

Attends et Signal Operadans Semaphores

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

Attendre Operaproduction

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--;
}

Signal la vente au détail h/

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

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

Compte Semaphore vs binaire Semaphore

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

Compte Semaphore binaire Semaphore
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 Semaphore contre Mutex

Paramètres Semaphore mutex
Mécanisme C'est un type de mécanisme de signalisation. C'est un mécanisme de verrouillage.
Type de données Semaphore 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ément.
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 Types d' Semaphore comptent les sémaphores et les sémaphores binaires et Mutex n'a pas de sous-types.
Opération Semaphore la valeur 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 de Semaphores

Voici les avantages/avantages de l’utilisation Semaphore:

  • Il permet à plusieurs threads d'accéder à la section critique
  • SemaphoreLes s sont indépendants de la machine.
  • SemaphoreLes s 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 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 les blocages dans le sémaphore, les commandes Wait et Signal les opérations doivent être exécutées dans le bon ordre.
  • Semaphore la programmation 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é.
  • Semaphore est plus sujet aux erreurs du programmeur.
  • Cela peut causer impasse ou violation de l'exclusion mutuelle en raison d'une erreur du programmeur.

Résumé

  • Semaphore 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 assurer la synchronisation 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
  • Signal l'opération de sémaphore est utilisée pour contrôler la sortie d'une tâche d'une section critique
  • Compte Semaphore n'a pas d'exclusion mutuelle alors que le binaire Semaphore a une exclusion mutuelle
  • Semaphore signifie un mécanisme de signalisation tandis que Mutex est un mécanisme de verrouillage
  • Semaphore 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.