semáforo - Gustavo Wagner

Propaganda
Sistemas Operacionais
FATEC-PB
Professor: Gustavo Wagner
[email protected]
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
1
Capítulo 2
Processos e Threads
2.1 Processos
2.2 Threads
2.3 Comunicação interprocesso
2.4 Problemas clássicos de IPC
2.5 Escalonamento
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
2
Semáforos
• Dijkstra propôs, em 1965, usar uma variável
inteira para contar o número de sinais de
acordar para uso futuro;
• A variável introduzida foi o semáforo;
• Semáforo: 0: nenhum sinal foi salvo; maior
que 0: quantidade de sinais pendentes;
• Operações down e up (generalizações de
sleep e wakeup);
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Semáforos
• down: se for 0, o processo dorme; se for maior
que 0, subtrai de um o valor da variável;
• up: incrementa em 1 o valor da variável;
– Essa operação não bloqueia nenhum processo;
• Verificar o valor do semáforo, alterá-lo e
possivelmente colocar o processo para dormir são
ações atômicas;
• Isso é necessário para resolver os problemas de
sincronização e evitar condições de disputa;
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Semáforos
• Usa-se a instrução TSL para garantir que
múltiplas CPUs tenham acesso ao semáforo;
• Como as operações sobre o semáforo duram
apenas microsegundos, usar TSL não é um
problema;
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Desafio
• Qual o algoritmo para o problema do
produtor-consumidor usando semáforos?
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Resolvendo produtor-consumidor
com semáforos
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Usos distintos de semáforos
• No caso do produtor-consumidor: full e
empty são usados para sincronização;
• O mutex (semáforo binário) é usado para
exclusão mútua;
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Mutex
•
•
•
•
Mutex = Mutual Exclusion;
Semáforo binário: apenas 0 ou 1;
Serve para exclusão mútua;
Entendendo melhor interrupção de dispositivo:
– Usa-se um mutex para o dispositivo, com valor
inicialmente em 0;
– O processo que deu um down no mutex dorme;
– Quando a interrupção chega, dá-se um up no mutex;
– O processo trata a resposta;
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Mutexes
Implementação de mutex_lock e mutex_unlock
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Discussão sobre memória
compartilhada
• Solução de Peterson e algumas anteriores levam
em consideração que os processos tenham
memória compartilhada: buffer, turn;
• Como é possível?
• Para threads isso é fácil;
• Para processos, há basicamente duas formas:
– Armazenar essas variáveis no SO e acessar via System
Call;
– SO modernos (Unix, Windows) oferecem uma área de
compartilhamento entre processos;
– Em último caso, usa-se arquivo;
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Monitores
• Usar semáforos é complexo, pois imagine
se invertermos a ordem dos downs, no caso
do produtor, e se o buffer estivesse cheio!!
• Para facilitar, Hoare e Brinch propuseram
uma unidade básica de sincronização de alto
nível chamada monitor;
• Monitor: coleção de procedimentos,
variáveis e estrutura de dados agrupados
num pacote;
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Monitores
• Apenas um processo pode estar ativo num
monitor em um determinado momento;
• Monitor é uma construção de linguagem de
programação;
• Os compiladores usam semáforo
binário/mutex para garantir exclusão mútua;
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Monitores
• Garante exclusão mútua: nunca dois processos
podem estar ao mesmo tempo no monitor;
• Mas como garantir que um processo bloqueie se
não puder continuar?
– Usam-se variáveis condicionais: condition;
• Um processo que deseja bloquear chama um wait
sobre a variável condicional;
• O processo que deseja acordar outro chama um
signal;
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Monitores
Exemplo de um monitor
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Monitores
• Delineamento do problema do produtor-consumidor com monitores
– somente um procedimento está ativo por vez no monitor
– o buffer tem N lugares
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Monitores em java
Solução para o problema do produtor-consumidor em Java
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Java
• Desde sempre Java suportou monitores:
usa-se synchronized nas assinaturas dos
métodos ou em uma variável;
• À partir de Java 1.5 tem-se semáforos,
mutex, variáveis condicionais;
Pearson Education
Sistemas Operacionais Modernos – 2ª Edição
Download