Semáforo vs. Mutex

Introdução

Um Sistema Operacional (SO) processo interage com outros processos em execução no mesmo sistema para concluir uma tarefa em comum. Processos que interagem com outros processos são conhecidos como processos cooperativos.

com base nas estratégias de comunicação entre processos (IPC) implementadas por um processo, ele pode compartilhar seu espaço de endereço com outros processos ou se comunicar por meio da troca de mensagens. Na técnica anterior, é fundamental controlar a comunicação, pois ambos os processos compartilham um espaço de endereço comum.

esse controle da comunicação do processo é conhecido como sincronização. Sem sincronização adequada, os processos podem ler dados obsoletos ou sobrescrever outros dados do processo.

o semáforo e o mutex são dois mecanismos pelos quais podemos implementar a sincronização e gerenciar a coordenação do processo. Neste artigo, examinaremos esses dois utilitários de sincronização e compararemos várias características.

entendendo a seção crítica

Antes de discutir semáforo e mutex, vamos entender o problema da seção crítica.

Vamos supor que temos um sistema que contém n processos. Cada um desses processos tem um segmento de código no qual o processo pode executar uma atualização de variável comum, uma atualização de tabela ou gravar em um arquivo. Este segmento de código é referido como a seção crítica de um processo.

2.1. Características de um problema de seção crítica

a característica essencial da seção crítica é que, uma vez que um processo começa a executar sua seção crítica, nenhum outro processo pode executar sua seção crítica. Ou seja, dois processos não podem executar sua seção crítica simultaneamente. Esse problema crítico da seção é projetar um protocolo para que os processos possam usar a cooperação.

cada processo precisa obter permissão para entrar em sua seção crítica. O pedaço de código que implementa a permissão é conhecido como a seção de entrada. Da mesma forma, o pedaço de código que implementa a saída da seção crítica é conhecido como a seção de saída.

2.2. Critérios de Crítica-Seção Problema

A solução para uma crítica-seção problema precisa atender os seguintes critérios:

  • Exclusão Mútua: Se um processo está em execução a sua seção crítica, nenhum outro processo pode executar a sua seção crítica
  • > > Progresso: Se o processo não está em execução a sua seção crítica, em seguida, outros processos podem decidir executar a sua seção crítica. Com base na solução e na implementação, é selecionado um processo que pode executar sua seção crítica. Características notáveis são processos que têm a capacidade de se proceder a um processo de seleção para executar a sua seção crítica
  • Delimitada de Espera: deve ser delimitada esperar por um processo quando ele pediu para sua seção crítica seção de entrada e o número de vezes que o outro executa o processo de sua seção crítica

Mutex Locks

Existem vários utilitários para resolver o problema de seção crítica em um sistema operacional. A exclusão mútua (mutex) bloqueia ou o mutex é a solução mais simples. Usamos as travas mutex para proteger a seção crítica e evitar as condições de corrida. Um processo precisa adquirir o bloqueio antes de acessar sua seção crítica e libera o bloqueio assim que termina a execução da seção crítica.

3.1. Como funciona um bloqueio Mutex?

essas duas funcionalidades para adquirir e liberar bloqueios são representadas por meio de duas funções-acquire () e release(). A função de aquisição adquire o bloqueio e a liberação libera o bloqueio. Um bloqueio mutex tem uma variável booleana que decide se o bloqueio está disponível ou não. Se o bloqueio estiver disponível, o método acquire() será bem-sucedido e o bloqueio será considerado como não disponível. Qualquer processo que tente acessar um bloqueio indisponível é bloqueado até que o bloqueio seja liberado.

O seguinte pseudo-código mostra a adquirir() método:

Prestados por QuickLaTeX.com

O seguinte pseudo-código mostra o método release() :

Prestados por QuickLaTeX.com

3.2. Desvantagens de Mutexes

a principal desvantagem de um bloqueio mutex é que ele permite que o spinlock thread se o bloqueio não estiver disponível.

enquanto um thread adquiriu o bloqueio e está em sua seção crítica, todos os outros threads que tentam adquirir o bloqueio estão em um loop onde o thread verifica periodicamente se o bloqueio está disponível. Assim, ele gira para o bloqueio e desperdiça ciclos de CPU que poderiam ter sido usados por alguns outros threads de forma produtiva.

este é um grande problema em uma única máquina CPU. Spinlock também é conhecido como busy waiting, pois o thread está” ocupado ” esperando pelo bloqueio.

3.3. Vantagens dos Mutexes

embora os bloqueios mutex sofram com a questão do spinlock, eles têm uma vantagem. Como os spinlocks de processo na CPU, elimina a necessidade da troca de contexto do processo, o que de outra forma teria exigido.

a troca de contexto de um processo é uma operação que consome muito tempo, pois requer salvar estatísticas de processo em execução no bloco de controle de processo (PCB) e recarregar outro processo na CPU. Existem CPUs multiprocessadores onde um processo pode girar em um núcleo do processador e outro pode executar sua seção crítica. Assim, um spinlock de curta duração em alguns cenários é mais útil do que um switch de contexto de processo.

semáforo

um semáforo é outro utilitário que também fornece recursos de sincronização semelhantes aos bloqueios mutex, mas é mais robusto e sofisticado.

um semáforo é uma variável inteira que, além da inicialização, é acessada por meio de duas operações atômicas padrão – wait() e signal(). O wait() operação é denominado como o P, e o sinal() operação é denominado como V.

Vamos dar uma olhada no wait() operação de:

Prestados por QuickLaTeX.com

Finalmente, vejamos o sinal() operação de:

Prestados por QuickLaTeX.com

!

todas as operações para o valor inteiro do semáforo no wait() e signal() executado atomicamente. Ou seja, uma vez que um processo modifica o valor do semáforo, nenhum outro processo pode modificar simultaneamente o mesmo valor do semáforo.

com base no valor do semáforo S, é classificado em duas categorias – contando semáforo e semáforo binário. O valor de um semáforo de contagem pode variar mais de 0 a um valor finito. Considerando que, o valor de um semáforo binário pode estar entre 0 e 1.

4.1. Contagem de semáforos

Contagem de semáforos pode controlar o N Número de instâncias de um determinado recurso. Vamos explicar o semáforo de contagem com uma analogia.Vamos supor que existe uma biblioteca com três salas de estudo, e há um bibliotecário que detém dez chaves, cada uma para uma sala diferente. Uma vez que um leitor requer acesso a uma sala, eles precisam obter uma chave para usar a sala. Uma vez que um leitor é feito com seu uso, eles devolvem a chave da sala para o bibliotecário. Uma vez que todos os quartos estão em uso, um novo leitor precisa esperar até que um quarto seja desocupado por um leitor existente.

no exemplo acima, o recurso é uma sala e há dez instâncias dela. Essas instâncias são gerenciadas por meio de um semáforo de contagem que é inicializado com dez. Este valor do semáforo é controlado através dos métodos wait() e signal() do semáforo. O diagrama a seguir ilustra isso:

4.2. Semáforos binários

um semáforo binário tem dois valores possíveis, 0 e 1. Se o recurso gerenciado pelo semáforo estiver disponível, o valor do semáforo será 1. Caso contrário, ele é definido como 0, indicando que o recurso não está disponível.

um semáforo binário tem a mesma funcionalidade que um bloqueio mutex. Sistemas que não suportam bloqueios mutex podem alavancar semáforos binários para alcançar a mesma funcionalidade.

O diagrama a seguir ilustra o semáforo binário:

Semáforo vs. Mutex

a tabela A seguir resume as características importantes do semáforo e mutex locks:

Prestados por QuickLaTeX.com

Conclusão

neste artigo, discutimos vários aspectos da mutexes e sinais.Primeiro, discutimos a seção crítica e a necessidade de um mutex ou semáforo para controlar a execução da seção crítica. Então falamos sobre mutex e semáforo.

por fim, fornecemos uma comparação de semáforo e mutex.

se você tem alguns anos de experiência em Ciência da Computação ou pesquisa e está interessado em compartilhar essa experiência com a comunidade, dê uma olhada em nossas Diretrizes de Contribuição.

Deixe uma resposta

O seu endereço de email não será publicado.