Você está na página 1de 10

Sistemas Operacionais

Semáforos

Francisco José da Silva e Silva

Grupo de Pesquisa em Sistemas Distribuı́dos (GSD)


Departamento de Informática / UFMA
http://www.lsd.ufma.br

20 de agosto de 2009

Francisco Silva (UFMA/GSD) Sistemas Operacionais 20 de agosto de 2009 1 / 10


Introdução

Semáforo é uma variável protegida que só pode ser acessada através de operações
chamadas P (do holandês passeren) e V (vrigeven).
Semáforos binários só podem assumir valores 0 e 1 enquanto os semáforos
contadores (ou gerais) somente podem assumir valores inteiros não negativos.

Operaç~
ao P(S):
Se S > 0 Ent~ao S := S -1
Sen~
ao (espere em S)

Operaç~
ao V(S):
Se (um ou mais processos est~ao esperando em S)
Ent~
ao (deixe que um desses processos prossiga)
Sen~
ao S := S + 1

Deve haver uma fila para os processos que se encontram esperando para completar
uma operação P(S).
P e V são indivisı́veis.

Francisco Silva (UFMA/GSD) Sistemas Operacionais 20 de agosto de 2009 2 / 10


Resolvendo Exclusão Mútua Utilizando Semáforos

Francisco Silva (UFMA/GSD) Sistemas Operacionais 20 de agosto de 2009 3 / 10


Exemplo 1: Variáveis Compartilhadas

Considere o seguinte exemplo de processos concorrentes:

Francisco Silva (UFMA/GSD) Sistemas Operacionais 20 de agosto de 2009 4 / 10


Exemplo 1: Variáveis Compartilhadas
A solução do mesmo utilizando semáforos é como segue:

Francisco Silva (UFMA/GSD) Sistemas Operacionais 20 de agosto de 2009 5 / 10


Exemplo 2: Problema do Produtor e Consumidor

producer() { consumer() {
while (TRUE) { while (TRUE) {
produceItem(item); P(full);
P(empty); P(mutex);
P(mutex); removeItem(item);
enterItem(item); V(mutex);
V(mutex); V(empty);
V(full); }
} }
}

semaphore muxtex = 1;
semaphore full = 0;
semaphore empty = N;
fork(producer, 0);
fork(consumer, 0);

Observe que se você inverter as operações P no processo consumidor


poderá haver deadlock.
Francisco Silva (UFMA/GSD) Sistemas Operacionais 20 de agosto de 2009 6 / 10
Exemplo 3: Problema dos Leitores e Escritores

Francisco Silva (UFMA/GSD) Sistemas Operacionais 20 de agosto de 2009 7 / 10


Exemplo 3: Problema dos Leitores e Escritores

Polı́tica utilizada: enquanto um leitor manipula o recurso e novos


leitores estiverem chegando para utiliza-lo, qualquer escritor que
queira utilizar o recurso deve esperar que ele se torne disponı́vel;

Os leitores podem dominar o recurso de forma a impedir que um


escritor consiga acessá-lo.

Francisco Silva (UFMA/GSD) Sistemas Operacionais 20 de agosto de 2009 8 / 10


Uma Segunda Polı́tica

Francisco Silva (UFMA/GSD) Sistemas Operacionais 20 de agosto de 2009 9 / 10


Considerações Sobre o Uso de Semáforos

As operações de manipulação de semáforos encontram-se disponı́veis


nas chamadas ao sistema de diversos sistemas operacionais como
Unix, Windows e OS/2;
No entanto, o uso das operações P e V possui as seguintes
desvantagens:
1 não delimitam claramente uma RC através da inspeção visual no texto
do programa;
2 a solução de problemas pode envolver o uso de muitos semáforos
tornando-a complexa e gerando o perigo da introdução de bloqueios
perpétuos ou falhas na proteção de seções crı́ticas;
3 as operações P e V são utilizadas tanto para prover exclusão mútua
quanto para prover sincronização condicional. Isto torna difı́cil que se
identifique o objetivo de um dado par P e V sem que se observe outras
operações que envolve o semáforo em questão.

Francisco Silva (UFMA/GSD) Sistemas Operacionais 20 de agosto de 2009 10 / 10

Você também pode gostar