Qu'est-ce que le sémaphore? Binaire, types de comptage avec exemple

Table des matières:

Anonim

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 thread qui attend sur un sémaphore peut être signalé par un autre thread. Il utilise deux opérations atomiques, 1) attente et 2) signal pour la synchronisation du processus.

Un sémaphore autorise ou interdit l'accès à la ressource, ce qui dépend de la façon dont elle est configurée.

Dans ce didacticiel sur le système d'exploitation (OS), vous apprendrez:

  • Caractéristique du sémaphore
  • Qu'est-ce que le sémaphore?
  • Types de sémaphores
  • Exemple de sémaphore
  • Attendre et signaler les opérations dans les sémaphores
  • Comptage du sémaphore vs sémaphore binaire
  • Différence entre sémaphore et mutex
  • Avantages des sémaphores
  • Inconvénient des sémaphores

Caractéristique du sémaphore

Ici, sont caractéristiques d'un sémaphore:

  • C'est un mécanisme qui peut être utilisé pour assurer la synchronisation des tâches.
  • C'est un mécanisme de synchronisation de bas niveau.
  • 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 nombre initial = 0, le sémaphore de comptage doit être créé dans l'état indisponible.

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

Sémaphores binaires

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

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 ibegin… P(mutex);execute CS;V(mutex);… End;

Attendre et signaler les opérations dans les sémaphores

Ces deux opérations sont utilisées pour implémenter la synchronisation des processus. Le but de cette opération de 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. Elle est également appelée 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 du signal

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

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

Comptage du sémaphore vs 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 a 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 d'attente et de signal peuvent modifier un sémaphore. Il n'est modifié que par le processus qui peut demander ou libérer une ressource.
La gestion des ressources Si aucune ressource n'est libre, 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 conservé dans une file d'attente. Cela ne doit être accessible que lorsque le mutex est déverrouillé.
Fil de discussion Vous pouvez avoir plusieurs threads de programme. Vous pouvez avoir plusieurs threads de programme dans mutex mais pas simultanément.
La possession La valeur peut être modifiée par tout processus libérant ou obtenant la ressource. Le verrouillage d'objet n'est libéré que par le processus, qui a obtenu le verrou sur celui-ci.
Les 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. Dans le cas où 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 à 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 il y a une attente occupée dans le sémaphore, il n'y a jamais de perte de temps et de ressources de processus.
  • 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 de priorité.
  • 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 c'est uniquement par convention.
  • Afin d'éviter les blocages dans le sémaphore, les opérations Attendre et Signal doivent être exécutées dans le bon ordre.
  • La programmation de sémaphore est compliquée, il y a donc des chances de ne pas parvenir à 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.
  • Cela peut entraîner un blocage ou une 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 assurer la synchronisation des tâches.
  • Le comptage du sémaphore utilise un décompte qui permet d'acquérir ou de libérer la tâche plusieurs fois.
  • Les sémaphores binaires sont assez similaires au comptage des sémaphores, 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
  • Compter le sémaphore n'a pas d'exclusion mutuelle alors que le sémaphore binaire a une exclusion mutuelle
  • Sémaphore signifie un mécanisme de signalisation tandis que Mutex est un mécanisme de verrouillage
  • Le sémaphore permet à plus d'un thread d'accéder à la section critique
  • L'une des plus grandes limitations d'un sémaphore est l'inversion de priorité.