O que é o Semaphore? Contando, tipos binários com exemplo
O que é o Semaphore?
Semaphore é simplesmente uma variável que não é negativa e compartilhada entre threads. Um semáforo é um mecanismo de sinalização, e uma thread que está esperando por um semáforo pode ser sinalizada por outra thread. Ele usa duas operações atômicas, 1) Wait, e 2) Signal 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.
Característica de Semaphore
Aqui estão as 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.
- Semaphore sempre conterá um valor inteiro não negativo.
- Semaphore pode ser implementado usando operações de teste e interrupções, que devem ser executadas usando descritores de arquivo.
Tipos de Semaphores
Os dois tipos comuns de semáforos são
- Contando semáforos
- Semáforos binários.
Contando Semaphores
Este tipo de Semaphore 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.
Porém, se a contagem for> 0, o semáforo é criado no estado disponível e o número de tokens que possui é igual à sua contagem.
Binário Semaphores
Os semáforos binários são bastante semelhantes aos semáforos de contagem, mas seu valor é restrito a 0 e 1. Neste 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 implementar do que contar semáforos.
Exemplo de Semaphore
O programa fornecido a seguir é uma implementação passo a passo, que envolve o uso e declaração de semáforo.
Shared var mutex: semaphore = 1; Process i begin . . P(mutex); execute CS; V(mutex); . . End;
Espere e Signal Operações em Semaphores
Ambas as operações são usadas para implementar sincronização de processo. O objetivo desta operação de semáforo é obter exclusão mútua.
Esperar por 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).
Após a diminuição do valor do semáforo, que se torna negativo, o comando é mantido até que as condições exigidas sejam satisfeitas.
Copy CodeP(S) { while (S<=0); S--; }
Signal operação
Este tipo de Semaphore operação é usada para controlar a saída de uma tarefa de uma seção crítica. Ela ajuda a aumentar o valor do argumento em 1, que é denotado como V(S).
Copy CodeP(S) { while (S>=0); S++; }
Contando Semaphore vs. Binário Semaphore
Aqui estão algumas diferenças importantes entre contagem e semáforo binário:
Contando Semaphore | Binário Semaphore |
---|---|
Sem exclusão mútua | Exclusão mútua |
Qualquer valor inteiro | Valor apenas 0 e 1 |
Mais de um slot | Apenas um slot |
Fornecer um conjunto de processos | Tem um mecanismo de exclusão mútua. |
Diferença entre Semaphore versus mutex
Parâmetros Técnicos | Semaphore | Mutex |
---|---|---|
Mecanismo | É um tipo de mecanismo de sinalização. | É um mecanismo de bloqueio. |
Tipo de dados | Semaphore é uma variável inteira. | Mutex é apenas um objeto. |
Modificação | As operações de espera e sinal podem modificar um semáforo. | É modificado apenas pelo processo que pode solicitar ou liberar um recurso. |
Gestão de recursos | Se nenhum recurso estiver livre, então o processo requer um recurso que deve executar a operação de espera. Deve-se 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 fila. Isso precisa ser acessado somente quando o mutex estiver 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 que libere ou obtenha o recurso. | O bloqueio do objeto é liberado apenas pelo processo que o obteve. |
Tipos | Tipos de Semaphore estão contando semáforo e semáforo binário e | Mutex não possui subtipos. |
Divisão de | Semaphore o valor é modificado usando as operações wait() e signal(). | O objeto Mutex está bloqueado ou desbloqueado. |
Ocupação de Recursos | Ele está ocupado se todos os recursos estiverem sendo utilizados e o processo solicitante do recurso realizar a operação wait () e se bloquear até que a contagem do semáforo se torne >1. | Caso o objeto já esteja bloqueado, o processo que solicita recursos aguarda e é enfileirado pelo sistema antes que o bloqueio seja liberado. |
Vantagens de Semaphores
Aqui estão os prós/benefícios de usar Semaphore:
- Permite que mais de um thread acesse a seção crítica
- Semaphores são independentes da máquina.
- Semaphores são implementados no código independente de máquina do microkernel.
- Eles não permitem que vários processos entrem na seção crítica.
- Como há uma espera ocupada no semáforo, nunca há desperdício de tempo e recursos de processo.
- Eles são independentes de máquina, e devem ser executados no código independente de máquina do microkernel.
- Eles permitem o gerenciamento flexível de recursos.
Desvantagem dos semáforos
Aqui estão os contras/desvantagens 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 de espera e sinalizar o semáforo.
- Seu uso nunca é obrigatório, mas é apenas por convenção.
- Para evitar deadlocks no semáforo, o Wait e Signal as operações precisam ser executadas na ordem correta.
- Semaphore a programação é complicada, por isso há possibilidades de não se alcançar a exclusão mútua.
- Também não é um método prático para utilização em larga escala, uma vez que a sua utilização conduz à perda de modularidade.
- Semaphore é mais sujeito a erros do programador.
- Pode causar impasse ou violação de exclusão mútua devido a erro do programador.
Resumo
- Semaphore é 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 você a controlar a entrada de uma tarefa na seção crítica
- Signal A operação de semáforo é usada para controlar a saída de uma tarefa de uma seção crítica
- Contando Semaphore não tem exclusão mútua, enquanto binário Semaphore tem exclusão mútua
- Semaphore significa um mecanismo de sinalização, enquanto Mutex é um mecanismo de bloqueio
- Semaphore permite que mais de um thread acesse a seção crítica
- Uma das maiores limitações de um semáforo é a inversão de prioridade.