85
Silberschatz, Galvin e Gagne ©2007 eitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

Embed Size (px)

Citation preview

Page 1: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Capítulo 6: Sincronismo de processo

Page 2: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.2 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Capítulo 6: Sincronismo de processo

Base O problema da seção crítica Solução de Peterson Hardware de sincronismo Semáforos Problemas clássicos de sincronismo Monitores Exemplos de sincronismo Transações indivisíveis

Page 3: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.3 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Base

Acesso concorrente aos dados compartilhados pode resultar em inconsistência de dados

Manutenção da consistência dos dados requer mecanismos para garantir a execução ordenada dos processos em cooperação

Suponha que queiramos oferecer uma solução para um problema de consumidor-produtor que preencha todos os buffers. Podemos fazer isso com um contador inteiro que acompanha o número de buffers cheios. Inicialmente, o contador é definido como 0. Ele é incrementado pelo produtor depois de produzir um novo buffer e é decrementado pelo consumidor depois de consumir um buffer.

Page 4: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.4 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Produtor

Page 5: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.5 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Consumidor

Page 6: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.6 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Condição de race

count++ poderia ser implementado como

register1 = count register1 = register1 + 1 count = register1

count-- poderia ser implementado como

register2 = count register2 = register2 - 1 count = register2

Considere esta execução intercalando com “count = 5” inicialmente:S0: produtor executa register1 = count {register1 = 5}S1: produtor executa register1 = register1 + 1 {register1 = 6} S2: consumidor executa register2 = count {register2 = 5} S3: consumidor executa register2 = register2 - 1 {register2 = 4} S4: produtor executa count = register1 {count = 6 } S5: consumidor executa count = register2 {count = 4}

Page 7: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.7 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Solução do problema de seção critica

1. Exclusão mútua – Se o processo Pi estiver executando em sua seção crítica, então nenhum outro processo poderá estar executando em suas seções críticas.

2. Progresso – Se nenhum processo estiver executando em sua seção crítica e houver alguns processos que queiram entrar em sua seção crítica, então a seleção dos processos que entrarão na seção crítica em seguida não poderá ser adiada indefinidamente.

3. Espera limitada - É preciso haver um limite sobre o número de vezes que outros processos têm permissão para entrar em suas seções críticas depois que um processo tiver feito uma solicitação para entrar em sua seção crítica e antes que essa solicitação seja concedida Suponha que cada processo seja executado em uma

velocidade diferente de zero Nenhuma suposição referente à velocidade relativa dos N

processos

Page 8: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.8 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema de seção crítica

1. Condição race – Quando há acesso simultâneo aos dados compartilhados e o resultado final depende da ordem de execução.

2. Seção crítica – Seção do código onde os dados compartilhados são acessados.

3. Seção de entrada - Código que solicita permissão para entrar em sua seção crítica.

4. Seção de saída – Código executado após a saída da seção crítica.

Page 9: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.9 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Estrutura de um processo típico

Page 10: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.10 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Solução de Peterson

Solução em dois processos Suponha que as instruções LOAD e STORE sejam

indivisíveis; ou seja, não podem ser interrompidas. Os dois processos compartilham duas variáveis:

int turn; Boolean flag[2]

A variável turn indica de quem é a vez de entrar na seção crítica.

O array flag é usado para indicar se um processo está pronto para entrar na seção crítica. flag[i] = true implica que o processo Pi está pronto!

Page 11: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.11 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Algoritmo para o processo Pi

Page 12: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.12 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Seção crítica usando locks

Page 13: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.13 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Hardware de sincronismo

Muitos sistemas oferecem suporte do hardware pra o código da seção crítica

Uniprocessadores – poderiam desativar interrupções Código atualmente em execução poderia ser executado

sem preempção Geralmente muito ineficaz em sistemas

multiprocessadores Sistemas operacionais usando isso não são

totalmente escaláveis Máquinas modernas oferecem instruções de hardware

especiais indivisíveis Indivisível = não interrompida

Ou testa word da memória e define valor Ou troca conteúdo de duas words da memória

Page 14: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.14 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Estrutura de dados para soluções de hardware

Page 15: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.15 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Solução usando GetAndSet

Page 16: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.16 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Solução usando Swap

Page 17: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.17 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Semáforo

Ferramenta de sincronismo que não exige espera ocupada Semáforo S – variável inteira Duas operações padrão modificam S: acquire() e release()

Originalmente chamadas P() e V() Menos complicado Só pode ser acessado por duas operações indivisíveis

Page 18: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.18 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Semáforo como ferramenta geral de sincronismo

Semáforo de contagem – valor inteiro pode variar por um domínio irrestrito

Semáforo binário – valor inteiro só pode variar entre 0 e 1; pode ser mais simples de implementar Também conhecidos como locks mutex

Page 19: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.19 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Exemplo Java usando semáforos

Page 20: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.20 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Exemplo Java usando semáforos

Page 21: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.21 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Implementação de semáforo

Precisa garantir que dois processos não poderão executar acquire () e release () no mesmo semáforo ao mesmo tempo

Assim, a implementação se torna o problema de seção crítica onde o código de espera e sinal são colocados na seção crítica. Agora poderia ter espera ocupada na

implementação da seção crítica Mas o código de implementação é curto Pouca espera ocupada se a seção crítica

raramente for ocupada Observe que as aplicações podem gastar muito tempo

nas seções críticas e, portanto, essa não é uma boa solução.

Page 22: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.22 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Implementação de semáforo sem espera ocupada

Com cada semáforo existe uma fila de espera associada. Cada entrada em uma fila de espera possui dois itens de dados: valor (do tipo integer) ponteiro para próximo registro na lista

Duas operações: block – coloca o processo que chama a

operação na fila de espera apropriada. wakeup – remove um dos processos na fila

de espera e o coloca na fila de prontos.

Page 23: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.23 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Implementação de semáforo sem espera ocupada (cont.)

Implementação de acquire():

Implementação de release():

Page 24: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.24 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Deadlock e starvation

Deadlock – dois ou mais processos estão esperando indefinidamente por um evento que só pode ser causado somente por um dos processos esperando

Sejam S e Q dois semáforos inicializados com 1

P0 P1

S.acquire(); Q.acquire(); Q.acquire(); S.acquire();

. .

. .

. . S.release(); Q.release();

Q.release(); S.release(); Starvation – lock indefinido. Um processo pode nunca ser removido

da fila de semáforo em que ele é suspenso.

Page 25: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.25 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problemas clássicos de sincronismo

Problema de buffer limitado Problema de leitores-escritores Problema do jantar dos filósofos

Page 26: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.26 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema de buffer limitado

N buffers, cada um podendo manter um item Mutex de semáforo inicializado com o valor 1 Semáforo cheio inicializado com o valor 0 Semáforo vazio inicializado com o valor N.

Page 27: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.27 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema de buffer limitado

Page 28: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.28 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema de buffer limitado

Método insert()

Page 29: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.29 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema de buffer limitado

Método remove()

Page 30: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.30 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema de buffer limitado (cont.)

A estrutura do processo produtor

Page 31: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.31 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema de buffer limitado (cont.)

A estrutura do processo consumidor

Page 32: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.32 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema de buffer limitado (cont.)

A Factory

Page 33: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.33 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema de leitores-escritores Um conjunto de dados é compartilhado entre diversos

processos concorrentes Leitores – só lêem o conjunto de dados; eles não

realizam quaisquer atualizações Escritores – podem ler e escrever.

Problema – permite que vários leitores leiam ao mesmo tempo. Apenas um único escritor pode acessar os dados compartilhados de uma só vez.

Dados compartilhados Conjunto de dados Mutex de semáforo inicializado com 1. db de semáforo inicializado com 1. readerCount inteiro inicializado com 0.

Page 34: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.34 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema de leitores-escritores

Interface para locks de leitura-escrita

Page 35: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.35 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema de leitores-escritores

Métodos chamados por escritores.

Page 36: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.36 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema de leitores-escritores

A estrutura de um processo escritor

Page 37: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.37 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema de leitores-escritores

A estrutura de um processo leitor

Page 38: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.38 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema do jantar dos filósofos

Dados compartilhados Tigela de arroz (conjunto de dados) Semáforo chopStick [5] inicializado com 1

Page 39: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.39 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problema do jantar dos filósofos (cont.)

A estrutura do Filósofo i:

Page 40: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.40 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Problemas com semáforos

Uso correto das operações de semáforo:

mutex.acquire() …. mutex.release()

mutex.wait() … mutex.wait()

Omissão de mutex.wait () ou mutex.release() (ou ambos)

Page 41: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.41 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Monitores

Uma abstração de alto nível que oferece um mecanismo conveniente e eficaz para o sincronismo de processo

Somente um processo pode estar ativo dentro do monitor em determinado momento

Page 42: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.42 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sintaxe de um monitor

Page 43: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.43 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Visão esquemática de um monitor

Page 44: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.44 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Variáveis de condição

Condição x, y; Duas operações em uma variável de

condição: x.wait () – um processo que invoca a

operação é suspenso. x.signal () – retoma um dos processos

(se houver) que invocou x.wait ()

Page 45: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.45 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Monitor com variáveis de condição

Page 46: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.46 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Solução do jantar dos filósofos

Page 47: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.47 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Solução do jantar dos filósofos (cont.)

Cada filósofo I invoca as operações takeForks(i) e returnForks(i) na seqüência a seguir:

dp.takeForks (i)

COMER

dp.returnForks (i)

Page 48: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.48 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo em Java

Java oferece sincronismo em nível de linguagem. Cada objeto Java possui um lock associado. Esse lock é adquirido pela invocação de um método

sincronizado. Esse lock é liberado na saída do método

sincronizado. Os threads esperando para adquirir o lock do objeto

são colocados no conjunto de entrada para o lock do objeto.

Page 49: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.49 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo em Java

Cada objeto possui um conjunto de entrada associado.

Page 50: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.50 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo em Java

Métodos sincronizados insert() e remove()

Page 51: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.51 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo em Java: wait/notify()

Quando um thread invoca wait():

1. O thread libera do lock do objeto;2. O estado do thread é definido como Blocked; 3. O thread é colocado no conjunto de espera para o objeto.

Quando um thread invoca notify():

1. Um thread qualquer T do conjunto de espera é selecionado;2. T é movido da espera para o conjunto de entrada;3. O estado de T é definido como Runnable.

Page 52: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.52 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo em Java

Entrada e conjuntos de espera

Page 53: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.53 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo em Java – buffer limitado

Page 54: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.54 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo em Java - buffer limitado

Page 55: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.55 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo em Java

A chamada a notify() seleciona um thread qualquer do conjunto de espera. É possível que o thread selecionado não esteja de fato esperando pela condição para a qual foi notificado.

A chamada notifyAll() seleciona todos os threads no conjunto de espera e os move para o conjunto de entrada.

Em geral, notifyAll() é uma estratégia mais conservadora do que notify().

Page 56: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.56 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo em Java – leitores-escritores

Page 57: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.57 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo em Java – leitores-escritores

Métodos chamados pelos leitores

Page 58: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.58 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo em Java – leitores-escritores

Métodos chamados pelos escritores

Page 59: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.59 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo em Java

Ao invés de sincronizar um método inteiro, blocosde código podem ser declarados como sincronizados

Page 60: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.60 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo em Java

Sincronismo de bloco usando wait()/notify()

Page 61: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.61 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Recursos de concorrência em Java 5

Semáforos

Page 62: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.62 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Recursos de concorrência em Java 5

Uma variável de condição é criada primeiro pela criação deReentrantLock e chamada do seu método newCondition():

Quando isso é feito, é possível invocar os métodosawait() e signal().

Page 63: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.63 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Exemplos de sincronismo

Solaris Windows XP Linux Pthreads

Page 64: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.64 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo no Solaris

Implementa uma série de locks para dar suporte à multitarefa, multithreading (incluindo threads em tempo real) e multiprocessamento

Usa mutexes adaptativos por eficiência ao proteger dados de segmentos de código curtos

Usa variáveis de condição e locks de leitores-escritores quando seções de código maiores precisam de acesso aos dados

Usa turnstiles para ordenar a lista de threads esperando para adquirir um mutex adaptativo ou lock de leitor-escritor

Page 65: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.65 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo no Windows XP

Usa máscaras de interrupção para proteger o acesso aos recursos globais em sistemas de uniprocessador

Usa máscaras de interrupção para proteger o acesso aos recursos globais em sistemas de uniprocessador

Usa spinlocks em sistemas de multiprocessador Também oferece objetos despachantes que podem

atuar como mutexes e semáforos Objetos despachantes também podem fornecer

eventos Um evento atua de modo semelhante a uma

variável de condição

Page 66: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.66 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo no Linux

Linux: Desativa interrupções para implementar

seções críticas curtas Linux oferece:

semáforos spin locks

Page 67: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.67 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Sincronismo Pthreads

API Pthreads é independente do OS Ela oferece:

locks de mutex variáveis de condição

Extensões não portáveis incluem: locks de leitura-escrita spin locks

Page 68: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.68 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Transações indivisíveis

Modelo do sistema Recuperação baseada em log Pontos de verificação Transações indivisíveis simultâneas

Page 69: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.69 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Modelo do sistema

Garante que as operações acontecem como uma única unidade lógica de trabalho, em sua inteireza, ou não acontecem

Relacionado ao campo de sistemas de banco de dados Desafio é assegurar a indivisibilidade apesar das falhas do

sistema de computação Transação – coleção de instruções ou operações que realiza

única função lógica Aqui, nos preocupamos com mudanças no

armazenamento estável – disco A transação é uma série de operações read e write Terminado com operação commit (transação bem

sucedida) ou abort (transação falhou) Transação abortada deve ser rolled back para desfazer

quaisquer mudanças que ele realiza

Page 70: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.70 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Tipos de meio de armazenamento

Armazenamento volátil – informação armazenada aqui não sobrevive a falhas do sistema Exemplo: memória principal, cache

Armazenamento não volátil – A informação normalmente sobrevive a falhas Exemplo: disco e fita

Armazenamento estável – Informação nunca se perde Não é realmente possível, e por isso é aproximado pela

replicação ou RAID para dispositivos com modos de falha independentes

Objetivo é garantir indivisibilidade da transação onde as falhas causam perda de informações no armazenamento volátil

Page 71: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.71 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Recuperação baseada em log

Registro de informações em armazenamento estável sobre todas as modificações feitas por uma transação

Mais comum é o logging write-ahead Log em armazenamento estável, cada registro de log

descreve operação de escrita de única transação, incluindo

Nome da transação Nome do item de dados Valor antigo Valor novo

<Ti inicia> escrito no log quando a transação Ti inicia <Ti confirma> escrito quando Ti confirma

Entrada de log precisa alcançar o armazenamento estável antes que a operação ocorra

Page 72: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.72 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Algoritmo de recuperação baseado em log

Usando o log, o sistema pode tratar de quaisquer erros de memória volátil Undo(Ti) restaura o valor de todos os dados atualizados

por Ti

Redo(Ti) define valores de todos os dados na transação Ti para novos valores

Undo(Ti) e redo(Ti) devem ser idempotentes

Múltiplas execuções devem ter o mesmo resultado que uma execução

Se o sistema falhar, restaura estado de todos os dados atualizados em log Se log contém <Ti starts> sem <Ti commits>, undo(Ti)

Se log contém <Ti starts> e <Ti commits>, redo(Ti)

Page 73: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.73 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Pontos de verificação

Log poderia se tornar longo, e recuperação poderia levar muito tempo

Pontos de verificação encurtam log e tempo de recuperação. Esquema de ponto de verificação:

1. Enviar todos os registradores de log atualmente no armazenamento volátil para o armazenamento estável

2. Enviar todos os dados modificados do armazenamento volátil para o estável

3. Enviar um registro de log <checkpoint> para o log no armazenamento estável

Agora a recuperação só inclui Ti, tal que Ti iniciou a execução antes do ponto de verificação mais recente, e todas as transações após Ti. Todas as outras transações já estão em armazenamento estável

Page 74: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.74 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Transações concorrentes

Devem ser equivalentes à execução serial - serialização

Poderiam executar todas as transações na seção crítica Ineficiente, muito restritivo

Algoritmos de controle de concorrência oferecem serialização

Page 75: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.75 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

serialização

Considere dois itens de dados A e B Considere as transações T0 e T1

Execute T0, T1 de forma indivisível Seqüência de execução chamada schedule Ordem de transação executada de forma

indivisível chamada schedule serial Para N transações, existem N! schedules

seriais válidos

Page 76: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.76 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Schedule 1: T0 depois T1

Page 77: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.77 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Schedule não serial

Schedule não serial permite execução sobreposta Execução resultante não necessariamente incorreta

Considere schedule S, operações Oi, Oj

Conflito se acessar mesmo item de dados, com pelo menos uma escrita

Se Oi, Oj consecutivos e operações de diferentes transações & Oi e Oj não em conflito

Então S’ com ordem trocada Oj Oi equivalente a S

Se S puder se tornar S’ via swapping de operações não em conflito S é seriável em conflito

Page 78: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.78 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Schedule 2: Schedule seriável simultâneo

Page 79: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.79 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Protocolo de lock

Garante serialização pela associação de lock a cada item de dados Segue protocolo de lock para controle de acesso

locks Compartilhado – Ti tem lock de modo compartilhado (S)

no item Q, Ti pode ler Q mas não escrever Q

Exclusivo – Ti tem lock em modo exclusivo (X) em Q, Ti pode ler e escrever Q

Exige que cada transação no item Q adquira lock apropriado

Se lock já for mantido, nova solicitação pode ter que esperar Semelhante ao algoritmo de leitores-escritores

Page 80: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.80 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Protocolo de lock em duas fases

Geralmente, garante serialização em conflito Cada transação emite solicitações de lock e

unlock em duas fases Crescimento – obtendo locks Encolhimento – liberando locks

Não impede deadlock

Page 81: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.81 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Protocolos baseados em estampa de tempo

Selecione a ordem entre transações com antecedência – ordenação por estampa de tempo

Transação Ti associada à estampa de tempo TS(Ti) antes que Ti inicie

TS(Ti) < TS(Tj) se Ti entrou no sistema antes de Tj

TS pode ser gerado pelo clock do sistema ou como contador lógico incrementado em cada entrada de transação

Estampas de tempo determinam a ordem de serialização Se TS(Ti) < TS(Tj), sistema deve garantir schedule

produzido equivalente a schedule serial, onde Ti aparece antes de Tj

Page 82: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.82 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Implementação do protocolo baseado em estampa de tempo

Item de dados Q recebe duas estampas de tempo estampa-W(Q) – maior estampa de tempo de qualquer

transação que executou write(Q) com sucesso estampa-R(Q) – maior estampa de tempo de read(Q) bem

sucedido Atualizado sempre que read(Q) ou write(Q) é executado

Protocolo de ordenação por estampa de tempo garante que qualquer read e write em conflito sejam executados na ordem da estampa de tempo

Suponha que Ti execute read(Q) Se TS(Ti) < estampa-W(Q), Ti precisa ler valor de Q que já

foi modificado operação read rejeitada e Ti cancelada

Se TS(Ti) ≥ estampa-W(Q) read executado, estampa-R(Q) definido como

max(estampa-R(Q), TS(Ti))

Page 83: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.83 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Protocolo de ordenação de estampa de tempo

Suponha que Ti execute write(Q) If TS(Ti) < estampa-R(Q), valor Q produzido por T i foi

necessário anteriormente e Ti assumiu que nunca seria produzido

Operação write rejeitada, Ti cancelada

Se TS(Ti) < estampa-W(Q), Ti tentando escrever valor obsoleto de Q

Operação write rejeitada e Ti cancelada Caso contrário, write executado

Qualquer transação cancelada Ti recebe nova estampa de tempo e é reiniciada

Algoritmo garante serialização por conflito e ausência de deadlock

Page 84: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

6.84 Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Schedule possível sob protocolo de estampa de tempo

Page 85: Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

Silberschatz, Galvin e Gagne ©2007Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006

Final do Capítulo 6