Breve Introdução de Semáforos
Semáforos
O conceito de semáforos foi proposto por E. W. Dijkstra em 1965, sendo apresentado comon um mecanismo de sincronização que permitia implementar, de forma simples, a exclusão mútua e sincronização condicional entre processos. De fato, o uso de semáforos tornou-se um dos principais mecanismos utilizados em projetos de sistemas operacionais e em aplicações concorrentes. Um semáforo é uma variável inteira, não-negativa, que só pode ser manipulada por duas instruções: DOWN e UP, Estas instruções são indivisíveis, isto é, não pode ser interrompida.
Semáforos são classificados em dois tipos: - Semáforos binários: chamados de mutexes (mutual exclusion semaphores), só podem assumir valores 0 e 1. Permitem a implementação da exclusão mútua e são utilizados nos casos onde a sincronização condicional é exigida. - Semáforos contadores: podem assumir qualquer valor inteiro positivo, além do 0. Semáforos contadores são úteis quando aplicados em problemas de sincronziação condicional onde existem processo concorrentes alocando recursos do mesmo tipo.
Exclusão mútua – suporte de hardware
Vantagens
Pode ser aplicável em qualquer número de processos, em um processador ou vários, que compartilham memória principal
Pode ser utilizado para dar suporte a uma variedade de seções críticas, sendo cada uma definida por sua própria variável
Desvantagens
Pode degradar o desempenho, pois diminui o grau de sobreposição de processos – dois processos não acessam a RC
Para ambiente multiprocessador, desabilitar interrupção não garante exclusão mútua
Exclusão mútua por software
Soluções de software com busy wait
Variável de bloqueio
Comutação alternada
Comutação não alternada