Pergunta

O que são os trade-offs entre o uso de um Sistema V e Posix Semaphore?

Foi útil?

Solução

A partir O 'Reilly :

  • Uma diferença marcante entre o System V e POSIX semáforos implementações é que em System V você pode controlar o quanto o semáforo contagem pode ser aumentado ou diminuído; enquanto que em POSIX, a contagem do semáforo é aumentada e diminuiu 1.
  • semáforos
  • POSIX não permitem a manipulação de permissões de semáforo, Considerando que o sistema V semáforos permitem que você para alterar as permissões de semáforos para um subconjunto do original permissão.
  • Inicialização e criação de semáforos é atômica (a partir do usuário perspectiva) em semáforos POSIX.
  • A partir de uma perspectiva de uso, System V semáforos são desajeitados, enquanto POSIX semáforos são straight-forward
  • A escalabilidade de semáforos POSIX (usando semáforos sem nome) é muito maior do que semáforos System V. Em um cenário de utilizador / cliente, onde cada usuário cria suas próprias instâncias de um servidor, seria melhor usar POSIX semáforos.
  • System V semáforos, ao criar um objecto de semáforo, cria uma matriz de semáforos enquanto semáforos POSIX criar apenas um. Por causa disso recurso, a criação do semáforo (memória footprint-wise) é mais caro no Sistema semáforos V quando em comparação com POSIX semáforos.
  • Tem sido dito que o desempenho POSIX semáforo é melhor do que Sistema de semáforos V-based.
  • semáforos
  • POSIX fornecem um mecanismo para semáforos de todo o processo, em vez de semáforos de todo o sistema. Assim, se um desenvolvedor se esquece de fechar a semáforo, saída em processo a semáforo é limpo. em simples termos, semáforos POSIX fornecer um mecanismo de não-persistentes semáforos.

Outras dicas

Dois grandes problemas com POSIX compartilhado / semáforos nomeados usados ??em processos separados (não threads): semáforos POSIX não fornecem um mecanismo para acordar um processo de espera quando a diferentes matrizes de processo, mantendo um bloqueio de semáforo. Esta falta de limpeza pode conduzir a zombie semáforos que causarão qualquer outro ou subsequente processo que tentativas para usá-los a um impasse. Também não há maneira POSIX de listar os semáforos no sistema operacional para tentar identificar e limpá-los. A seção POSIX em SysV IPC não especifica os IPCs e ferramentas ipcrm a lista e manipular recursos globais SysV IPC. Nenhuma dessas ferramentas ou até mesmo mecanismos são especificados para POSIX IPC, embora no Linux esses recursos, muitas vezes pode ser encontrado em / shm. Isto significa que um sinal KILL para o processo errado na hora errada pode impasse todo um sistema de interagir processos até reiniciar.

Outra desvantagem é o uso de semântica de arquivo para semáforos POSIX. A implicação é que não pode haver mais de um compartilhada semáforo com o mesmo nome, mas em estados diferentes. Por exemplo, um processo chama sem_open, então sem_unlink antes sem_close. Este processo ainda pode usar o semáforo como desvincular um arquivo aberto antes de o fechar. chamadas de processo 2 sem_open no mesmo semáforo entre as chamadas sem_unlink e sem_close de processo 1, e (de acordo com a documentação) recebe um novo semáforo marca com o mesmo nome, mas em um estado diferente do processo 1. Dois compartilhada semáforos com o mesmo nome operando independentemente derrota o propósito de semáforos compartilhados.

Limitação um acima marcas POSIX compartilhados semáforos inutilizáveis ??em um sistema no mundo real sem uma garantia de que os sinais uncatchable nunca pode ser enviada. Limitação dois podem ser mitigados pela cuidadosa codificação, assumindo o controle sobre todo o código que irá utilizar um determinado semáforo. Francamente, é mais do que um pouco surpreendente que eles fizeram isso para o padrão como estão.

Eu sei que isso é velho, mas para o benefício de quem ainda está lendo esta cortesia da Google, o # 1 razão de eu encontrar a usar semáforos System V sobre POSIX (system-level) semáforos é a capacidade de adquirir o recurso semáforo em uma maneira que é automaticamente devolvida pelo kernel não importa como o processo será encerrado.

Eu concordo que o múltiplo (atômica) operações de semáforo são raramente usados ??(embora eles podem ser úteis durante o preparo), e que a interface System V é bizarro, mas não há simplesmente nenhuma maneira de alcançar confiavelmente a mesma semântica de limpeza com semáforos POSIX.

Eu me pergunto o que faz as pessoas href="http://www.thejaywalker.net/2010/12/system-v-semaphores-how-not-to-design.html" mau API é como Sistema Semáforos V ! Uneless você tem razões muito fortes para ir com semáforos System V (tais como operações atômicas com múltiplos incremento-decremento em uma única etapa), você deve ficar com semáforos POSIX nomeados.

Os discute artigo ligado que está errado e não-intuitiva com o System V Semáforos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top