O que é semáforo? Binários, tipos de contagem com exemplo

Índice:

Anonim

O que é semáforo?

O semáforo é simplesmente uma variável não negativa e compartilhada entre threads. Um semáforo é um mecanismo de sinalização, e um encadeamento que está aguardando um semáforo pode ser sinalizado por outro encadeamento. Ele usa duas operações atômicas, 1) espera e 2) sinal para a sincronização do processo.

Um semáforo permite ou proíbe o acesso ao recurso, o que depende de como ele está configurado.

Neste tutorial de sistema operacional (SO), você aprenderá:

  • Característica do Semaphore
  • O que é semáforo?
  • Tipos de semáforos
  • Exemplo de semáforo
  • Operações de Espera e Sinal em Semáforos
  • Contando semáforo vs. semáforo binário
  • Diferença entre Semaphore vs. Mutex
  • Vantagens dos semáforos
  • Desvantagem de semáforos

Característica do Semaphore

Aqui, são características de um semáforo:

  • É um mecanismo que pode ser usado para fornecer sincronização de tarefas.
  • É um mecanismo de sincronização de baixo nível.
  • O semáforo sempre manterá um valor inteiro não negativo.
  • O semáforo pode ser implementado usando operações de teste e interrupções, que devem ser executadas usando descritores de arquivo.

Tipos de semáforos

Os dois tipos comuns de semáforos são

  • Contando semáforos
  • Semáforos binários.

Contando semáforos

Este tipo de Semáforo usa uma contagem que ajuda a tarefa a ser adquirida ou liberada inúmeras vezes. Se a contagem inicial = 0, o semáforo de contagem deve ser criado no estado indisponível.

No entanto, se a contagem for> 0, o semáforo é criado no estado disponível e o número de tokens que possui é igual à sua contagem.

Semáforos Binários

Os semáforos binários são bastante semelhantes aos semáforos de contagem, mas seu valor é restrito a 0 e 1. Nesse tipo de semáforo, a operação de espera funciona apenas se o semáforo = 1, e a operação de sinal é bem-sucedida quando o semáforo = 0. É fácil de implementar do que contar semáforos.

Exemplo de semáforo

O programa fornecido a seguir é uma implementação passo a passo, que envolve o uso e a declaração do semáforo.

Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;

Operações de Espera e Sinal em Semáforos

Ambas as operações são usadas para implementar a sincronização de processos. O objetivo dessa operação de semáforo é obter exclusão mútua.

Aguarde a operação

Este tipo de operação de semáforo ajuda a controlar a entrada de uma tarefa na seção crítica. No entanto, se o valor de espera for positivo, o valor do argumento de espera X será decrementado. No caso de valor negativo ou zero, nenhuma operação é executada. É também chamada de operação P (S).

Depois que o valor do semáforo é diminuído, que se torna negativo, o comando é mantido até que as condições exigidas sejam satisfeitas.

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

Operação de sinal

Este tipo de operação de semáforo é usado para controlar a saída de uma tarefa de uma seção crítica. Isso ajuda a aumentar o valor do argumento em 1, que é denotado como V (S).

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

Contando semáforo vs. semáforo binário

Aqui estão algumas das principais diferenças entre contagem e semáforo binário:

Contando semáforo Semáforo Binário
Sem exclusão mútua Exclusão mútua
Qualquer valor inteiro Valor apenas 0 e 1
Mais de um slot Apenas um slot
Fornece um conjunto de processos Possui um mecanismo de exclusão mútua.

Diferença entre Semaphore vs. Mutex

Parâmetros Semáforo Mutex
Mecanismo É um tipo de mecanismo de sinalização. É um mecanismo de bloqueio.
Tipo de dados O semáforo é uma variável inteira. Mutex é apenas um objeto.
Modificação As operações de espera e sinal podem modificar um semáforo. Ele é modificado apenas pelo processo que pode solicitar ou liberar um recurso.
Gestão de recursos Se nenhum recurso estiver livre, o processo requer um recurso que deve executar a operação de espera. Deve esperar até que a contagem do semáforo seja maior que 0. Se estiver bloqueado, o processo terá que esperar. O processo deve ser mantido em uma fila. Isso precisa ser acessado apenas quando o mutex está desbloqueado.
Fio Você pode ter vários threads de programa. Você pode ter vários threads de programa em mutex, mas não simultaneamente.
Propriedade O valor pode ser alterado por qualquer processo de liberação ou obtenção do recurso. O bloqueio do objeto é liberado apenas pelo processo, que obteve o bloqueio nele.
Tipos Tipos de semáforo são semáforo de contagem e semáforo binário e Mutex não tem subtipos.
Operação O valor do semáforo é modificado usando a operação wait () e signal (). O objeto Mutex está bloqueado ou desbloqueado.
Ocupação de Recursos Ele é ocupado se todos os recursos estão sendo usados ​​e o processo que solicita o recurso executa a operação wait () e se bloqueia até que a contagem do semáforo se torne> 1. Caso o objeto já esteja bloqueado, o processo solicitante de recursos aguarda e é enfileirado pelo sistema antes que o bloqueio seja liberado.

Vantagens dos semáforos

Aqui, estão os prós / benefícios de usar o Semaphore:

  • Permite que mais de um thread acesse a seção crítica
  • Os semáforos são independentes da máquina.
  • Os semáforos são implementados no código independente da máquina do microkernel.
  • Eles não permitem que vários processos entrem na seção crítica.
  • Como há muito tempo esperando no semáforo, nunca há desperdício de tempo e recursos do processo.
  • Eles são independentes da máquina, que devem ser executados no código independente da máquina do microkernel.
  • Eles permitem um gerenciamento flexível de recursos.

Desvantagem de semáforos

Aqui, estão os contras / desvantagem do semáforo

  • Uma das maiores limitações de um semáforo é a inversão de prioridade.
  • O sistema operacional deve acompanhar todas as chamadas a aguardar e sinalizar o semáforo.
  • Seu uso nunca é imposto, mas é apenas por convenção.
  • Para evitar deadlocks no semáforo, as operações Wait e Signal precisam ser executadas na ordem correta.
  • A programação de semáforo é complicada, então há chances de não se alcançar a exclusão mútua.
  • Também não é um método prático para uso em larga escala, pois seu uso leva à perda de modularidade.
  • O semáforo é mais sujeito a erros do programador.
  • Isso pode causar impasse ou violação de exclusão mútua devido a erro do programador.

Resumo:

  • O semáforo é definido como uma variável não negativa e compartilhada entre threads.
  • É um mecanismo que pode ser usado para fornecer sincronização de tarefas.
  • O semáforo de contagem usa uma contagem que ajuda a tarefa a ser adquirida ou liberada inúmeras vezes.
  • Os semáforos binários são bastante semelhantes aos semáforos de contagem, mas seu valor é restrito a 0 e 1.
  • A operação de espera ajuda a controlar a entrada de uma tarefa na seção crítica
  • A operação do semáforo de sinal é usada para controlar a saída de uma tarefa de uma seção crítica
  • O semáforo de contagem não tem exclusão mútua, enquanto o semáforo binário tem exclusão mútua
  • Semáforo significa um mecanismo de sinalização, enquanto Mutex é um mecanismo de bloqueio
  • O semáforo permite que mais de um segmento acesse a seção crítica
  • Uma das maiores limitações de um semáforo é a inversão de prioridade.