Testando o teste
• Proposto inicialmente por E. W. Dijkstra
• Consiste de uma variável inteira que é acessada exclusivamente por dois métodos: up e down
Sistemas Operacionais
2/18
Semáforos
Instituto
Superior
Tupy
• A operação down sobre um semáforo irá verificar se o seu valor é 0 (zero)
• Se for zero, o processo ficará aguardando até que seja maior que zero
• Se for maior que zero, o valor é decrementado em 1
• A operação up incrementará o valor do semáforo em um
Sistemas Operacionais
3/18
Semáforos
Instituto
Superior
Tupy
void down(sem) { while(sem == 0); sem--; } void up(sem) { sem++; }
Sistemas Operacionais
4/18
Semáforos
Instituto
Superior
Tupy
• Semáforos de contagem e semáforos binários
• Valor de semáforos de contagem podem variar de forma irrestrita
• Valor de semáforos binários só pode ser 0 ou 1
• Os semáforos binários (mutexes) são utilizados para controle de acesso à regiões críticas
• Um exemplo de uso:
down(semaforo); regiao_critica(); up(semaforo);
Sistemas Operacionais
5/18
Semáforos
Instituto
Superior
Tupy
• Um semáforo de contagem pode ser utilizado para controlar o acesso a um recurso em quantidade limitada • O semáforo é inicializado com o número de recursos disponíveis • Cada tarefa que começar a usar um recurso, executa um down no semáforo
• Quando liberar o recurso, executa um up no semáforo
• Se o semáforo chegar a zero, todos os recursos estarão sendo utilizados
• Nesse caso, quando uma tarefa tentar usar um recurso, irá executar down e ficará aguardando até que o valor do semáforo suba (algum recurso liberado)
Sistemas Operacionais
6/18
Semáforos
Instituto
Superior
Tupy
• Já falamos sobre as desvantagens da espera ociosa • Os semáforos que vimos até aqui estão realizando a exclusão mútua com essa técnica
(spinlock)
• Um alternativa, como já vimos, seria bloquear os processos e