Como outros já disseram, os semáforos são IPC (estruturas de comunicação interprocessos). Os semáforos, como todos os IPC, são usados para permitir que diferentes processos se comuniquem entre si.
Eles são basicamente contadores que são 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 é bem primitiva. "Comunicar" para semáforos significa ler, incrementar ou decrementar um contador através das chamadas do sistema / biblioteca mencionadas acima.
A coisa especial sobre 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 sobre um semáforo, pois o kernel não irá trocar um processo que está 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 / criam é que os programas os criam usando semget (2). Por exemplo. o apache cria sempahores quando é executado.
ipcs -l irá informá-lo sobre os recursos de ipc do sistema.
Você pode manipular alguns limites relacionados ao semáforo de sistema e ipc com sysctls.
Tente sysctl kernel.sem
para visualizar as configurações relacionadas ao sempahore via sysctl.
Se você quiser persistir quaisquer alterações sysctl, tente colocá-las em /etc/sysctl.conf
.