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.