SEMÁFOROS NO LINUX E WINDOWS .
Por: Wagner Rigoli da Rosa • 24/10/2017 • Trabalho acadêmico • 856 Palavras (4 Páginas) • 1.023 Visualizações
SEMÁFOROS NO LINUX E WINDOWS
1. INTRODUÇÃO
Semáforo é uma variável especial protegida (ou tipo abstrato de dados) que tem como função o controle de acesso a recursos compartilhados (por exemplo, um espaço de armazenamento) num ambiente multitarefa. A invenção desse tipo de variável é atribuída a Edsger Dijkstra, em 1965 e foi utilizado inicialmente no sistema operacional THEOS.
O valor de um semáforo indica quantos processos (ou threads) podem ter acesso a um recurso compartilhado. As principais operações sobre Semáforos são:
→ Inicialização: Recebe um valor inteiro indicando a quantidade de processos que podem acessar um determinado recurso.
→ Operação wait ou P: Descrementa o valor do semáforo. Se o semáforo está com valor zero, o processo é posto para dormir.
→ Operaçõa signal ou V: Se o semáforo estiver com valor zero e existir algum processo adormecido, um processo será acordado. Caso contrário, o valor do semáforo é incrementado.
No trabalho original, Dijkstra utilizou as letras P e V para denominar as operações, advindas dos verbos holandeses proberen (testar) e verhogen (incrementar). Em textos sobre computação, essas operações são denominadas por down e up, respectivamente.
2. TRABALHOS RELACIONADOS
Estudo da Estrutura do Sistema Operacional Linux – UFF (http://www.midiacom.uff.br/~natalia/2012-1-sisop/tgrupo3.pdf).
3. COMPARAÇÕES
Existem duas APIs utilizados nos sistemas que utilizam Kernel Linux, sendo eles XSI IPC, API tradicional, inspirada na API do System V, e a POSIX IPC.
A XSI IPC utiliza-se de namespace independente e utilitários específicos, é amplamente disponível e é utilizada em aplicações clássicas, como no servidor X11, que ainda não tem um substituto adequadamente pronto para tomar seu posto.
A POSIX IPC é sugerido para novas aplicações, se utiliza de namespace e utilitários do sistema de arquivos mas. Passou a estar disponível a partir do Kernel 2.6.
A sincronização do Kernel requer uma estrutura que permita que as tarefas do kernel sejam executadas sem violar a integridade dos dados compartilhados. O Linux fornece spinlock e semáforos (bem como versões de leitor e gravador) para fechamento do kernel. O spinlock é usado para períodos curtos. Para as máquinas com um único processador é usada a habilitação e desabilitação de preempção do kernel. O kernel não é suscetível a sofrer com preempção se estiver um lock. Cada tarefa do sistema tem uma estrutura thread-info que inclui o campo preempt_count que é o contador indicando o número de locks sendo mantidos pela tarefa. Se for maior que zero não é seguro fazer preempção e se for igual o kernel pode ser interrompido tendo em vista que não existe chamadas pendentes para preempt_disable(). Os semáforos são utilizados quando um lock for mantido por longos períodos.
Os semáforos do Windows são variáveis de contagem que permitem que um número limitado de threads/processos acesse um recurso compartilhado. No Windows, quando é utilizado wait, o valor limite pode ser especificado para objetos de semáforo, o que não é previsto no Linux.
Limite de semáforos no Kernel Linux 4.4.46 (Figura 1).
[pic 1]
Detalhamento do comando ipcs -l no Linux:
---- Limites de mensagens -----
número máximo geral de filas no sistema: 32000
tamanho máximo da mensagem (bytes) = 65536
tamanho máximo padrão da fila (bytes) = 65536
- Limites da memória compartilhada -
Número máximo de segmentos = 4096
Tamanho máximo de segmentos (kbytes) = 18014398509481983
total máximo de memória compartilhada (kbytes) = 18014398509480960
Tamanho mínimo de segmentos (bytes) = 1
------ Limites de semáforo ------
número máximo de vetores: 32000
máximo de semáforos por vetor: 32000
máximo geral de semáforos do sistema: 1024000000
máximo de ops por chamada semop: 500
valor máximo de semáforo: 32767
Obs.: Não encontrei comando similar para visualização dos dados para MS Windows.
...