Mutex vs Semaphore
de acordo com a terminologia do sistema operacional, mutex e semaphores são recursos do kernel que fornecem serviços de sincronização, também chamados primitivos de sincronização. A sincronização de processos desempenha um papel importante na manutenção da consistência dos dados compartilhados. As soluções de software e hardware estão presentes para lidar com problemas críticos de seção. Mas as soluções de hardware para problemas críticos de seção são bastante difíceis de implementar. Mutex e semaphore fornecem serviços de sincronização, mas não são os mesmos.
o que é Mutex?Mutex é um objeto de exclusão mútua que sincroniza o acesso a um recurso. Ele é criado com um nome exclusivo no início de um programa. O mecanismo de travamento mutex garante que apenas um thread possa adquirir o mutex e entrar na seção crítica. Este thread libera apenas o mutex quando ele sai na seção crítica.
é um tipo especial de semáforo binário usado para controlar o acesso ao recurso compartilhado. Inclui um mecanismo de herança de prioridade para evitar problemas de inversão de prioridade estendida. Ele permite que as tarefas atuais de maior prioridade sejam mantidas no estado bloqueado pelo menor tempo possível. No entanto, a herança prioritária não corrige a inversão de prioridade, mas apenas minimiza seu efeito.
Exemplo
Isso é mostrado com a ajuda do exemplo a seguir,
Uso de Mutex
Um mutex fornece a exclusão mútua, um produtor ou consumidor que pode ter a chave (mutex) e continuar com o seu trabalho. Contanto que o produtor preencha o buffer, o usuário precisa esperar e vice-versa. No bloqueio Mutex, o tempo todo, apenas um único thread pode funcionar com todo o buffer.
quando UM programa é iniciado, ele solicita que o sistema Crie um objeto mutex para um determinado recurso. O sistema cria o objeto mutex com um nome ou ID exclusivo. Sempre que o thread do programa deseja usar o recurso, ele ocupa o bloqueio no objeto mutex, utiliza o recurso e, após o uso, libera o bloqueio no objeto mutex. Em seguida, o próximo processo pode adquirir o bloqueio no objeto mutex.Enquanto isso, um processo adquiriu o bloqueio no objeto mutex, e nenhum outro thread ou processo pode acessar esse recurso. Se o objeto mutex já estiver bloqueado, o processo que deseja adquirir o bloqueio no objeto mutex terá que esperar e será enfileirado pelo sistema até que o objeto mutex seja desbloqueado.
vantagens do Mutex
Aqui estão as seguintes vantagens do mutex, tais como:
- Mutex é apenas bloqueios simples obtidos antes de entrar em sua seção crítica e depois liberá-lo.
- como apenas um thread está em sua seção crítica a qualquer momento, não há condições de corrida e os dados sempre permanecem consistentes.
desvantagens do Mutex
Mutex também tem algumas desvantagens, como:
- se um thread obtiver um bloqueio e for dormir ou for preemptado, o outro thread pode não avançar. Isso pode levar à fome.
- não pode ser Bloqueado ou desbloqueado a partir de um contexto diferente daquele que o adquiriu.
- apenas um thread deve ser permitido na seção crítica de cada vez.
- a implementação normal pode levar a um estado de espera ocupado, o que desperdiça tempo de CPU.
o que é semáforo?
o semáforo é simplesmente uma variável que não é negativa e compartilhada entre threads. Um semáforo é um mecanismo de sinalização, e outro fio pode sinalizar um fio que está esperando em um semáforo.
Um semáforo usa duas operações atômicas,
1. Espera: a operação de espera diminui o valor de seu argumento s se for positivo. Se s for negativo ou zero, nenhuma operação será executada.
2. Sinal para a sincronização do processo: a operação do sinal incrementa o valor de seu argumento S.
um semáforo permite ou rejeita o acesso ao recurso, dependendo de como ele é configurado.
uso de semáforo
no caso de um único buffer, podemos separar o buffer de 4 KB em quatro buffers de 1 KB. O semáforo pode ser associado a esses quatro buffers, permitindo que usuários e produtores trabalhem em diferentes buffers simultaneamente.
tipos de semáforo
o semáforo se distingue pelo sistema operacional em duas categorias contando semáforo e semáforo binário.
1. Contagem do semáforo: o valor do semáforo é inicializado para o número de recursos presentes no sistema. Sempre que um processo deseja acessar o recurso, ele executa a operação wait()no semáforo e diminui o valor do semáforo por um. Quando libera o recurso, ele executa a operação signal () no semáforo e incrementa o valor do semáforo em um.
quando a contagem do semáforo vai para 0, significa que os processos ocupam todos os recursos. Um processo precisa usar um recurso quando a contagem de semáforos é 0. Ele executa a operação wait () e é bloqueado até que o valor do semáforo se torne maior que 0.
2. Semáforo binário: o valor de um semáforo varia entre 0 e 1. É semelhante ao bloqueio mutex, mas mutex é um mecanismo de bloqueio, enquanto o semáforo é um mecanismo de sinalização. No semáforo binário, se um processo quiser acessar o recurso, ele executa a operação wait () no semáforo e diminui o valor do semáforo de 1 para 0. Quando libera o recurso, ele executa uma operação signal () no semáforo e incrementa seu valor para 1. Suponha que o valor do semáforo seja 0 e um processo queira acessar o recurso. Nesse caso, ele executa a operação wait () e bloqueia-se até que o processo atual utilizando os recursos libere o recurso.
> Vantagens do Semáforo
Aqui são as seguintes vantagens do semáforo, tais como:
- Ele permite que mais de uma 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á ocupado e 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.
- permitem uma gestão flexível dos recursos.
Desvantagem de Semáforos
Semáforos também tem algumas desvantagens, tais como:
- Uma das maiores limitações de um semáforo é inversão de prioridade.
- o sistema operacional deve acompanhar todas as chamadas para aguardar e sinalizar semáforo.
- seu uso nunca é aplicado, mas é apenas por convenção.
- as operações de espera e sinal precisam ser executadas na ordem correta para evitar deadlocks no semáforo.
- a programação do semáforo é um método complexo, portanto, há chances de não 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 propenso a erro do programador
- , e pode causar impasse ou violação da exclusão mútua devido a erro do programador.
diferença entre Mutex e semáforo
a diferença básica entre semáforo e mutex é que o semáforo é um mecanismo de sinalização, ou seja, os processos executam a operação wait() e signal() para indicar se estão adquirindo ou liberando o recurso. Em contraste, um mutex é um mecanismo de bloqueio e o processo deve adquirir o bloqueio em um objeto mutex se quiser adquirir o recurso. Aqui estão mais algumas diferenças entre semáforo e mutex, como:
Termos | Mutex | Semáforo |
---|---|---|
Definição | O mutex é um mecanismo de bloqueio, como para adquirir um recurso, um processo precisa bloquear o objecto de exclusão mútua, e ao liberar um recurso processo para desbloquear o objeto mutex. | o semáforo é um mecanismo de sinalização, pois as operações wait() e signal() realizadas na variável semáforo indicam se um processo está adquirindo ou liberando o recurso. |
Existência | Um mutex é um objeto. | o semáforo é uma variável inteira. |
função | Mutex permite que vários threads de programas acessem um único recurso, mas não simultaneamente. | o semáforo permite que vários threads de programas acessem uma instância finita de recursos. |
propriedade | Mutex object lock é liberado apenas pelo processo que adquiriu o bloqueio no objeto mutex. | o valor do semáforo pode ser alterado por qualquer processo que adquira ou libere o recurso executando a operação wait() e signal (). |
Categorizar | Mutex não é categorizado mais. | o semáforo pode ser categorizado em Contagem de semáforo e semáforo binário. |
operação | o objeto mutex é Bloqueado ou desbloqueado pelo processo de solicitação ou liberação do recurso. | o valor do semáforo é modificado usando a operação wait () e signal() além da inicialização. |
Recursos Ocupados | Se um objeto mutex já está travado, então o processo desejando adquirir recursos aguarda e ficar na fila pelo sistema até que o recurso é liberado e o objeto mutex fica desbloqueado. | suponha que o processo adquira todos os recursos e nenhum recurso seja gratuito. Nesse caso, o processo que deseja adquirir recurso executa a operação wait() na variável semáforo e se bloqueia até que a contagem de semáforo se torne maior que 0. |
Leave a Reply