Como outros já disseram, os semáforos são IPC (estruturas de comunicação entre processos). Semáforos como todo IPC são usados para permitir que diferentes processos se comuniquem.
Eles são basicamente contadores criados, acessados e destruídos usando chamadas especiais do sistema, como sempost (3), semwait (3), semget (2) e semop (2). Veja sem_overview (7) em um sistema Linux para uma breve descrição.
A definição de comunicação aqui é bastante primitiva. "Comunicar" para semáforos significa ler, aumentar ou diminuir um contador através das chamadas de sistema / biblioteca mencionadas acima.
O aspecto especial dos semáforos, além do fato de que eles são, é que apenas um processo de cada vez pode executar uma operação neles, e as operações do semáforo são garantidas atômicas , ou seja, você não pode entrar em uma condição de corrida por um período. semáforo como o kernel não trocará um processo que esteja executando uma operação de semáforo.
A outra coisa especial é que eles são criados na memória compartilhada, o que permite que vários processos os acessem.
Como eles se manifestam / criaram é que os programas os criam usando semget (2). Por exemplo, o apache cria sempahores quando é executado.
ipcs -l informará sobre os recursos ipc do sistema.
Você pode manipular alguns limites relacionados ao semáforo e ao ipc do sistema com sysctls. Tente sysctl kernel.sem
visualizar as configurações relacionadas ao sempahore via sysctl. Se você deseja persistir qualquer alteração sysctl, tente colocá-las /etc/sysctl.conf
.