cap6_sincronismo_silberschatz.pps

Propaganda
Capítulo 6: Sincronismo de processo
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.2
Silberschatz, Galvin e Gagne ©2007
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.
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.3
Silberschatz, Galvin e Gagne ©2007
Produtor
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.4
Silberschatz, Galvin e Gagne ©2007
Consumidor
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.5
Silberschatz, Galvin e Gagne ©2007
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}
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.6
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.7
Silberschatz, Galvin e Gagne ©2007
Problema de seção crítica
1.
2.
3.
4.
Condição race – Quando há acesso simultâneo aos
dados compartilhados e o resultado final depende da
ordem de execução.
Seção crítica – Seção do código onde os dados
compartilhados são acessados.
Seção de entrada - Código que solicita permissão para
entrar em sua seção crítica.
Seção de saída – Código executado após a saída da
seção crítica.
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.8
Silberschatz, Galvin e Gagne ©2007
Estrutura de um processo típico
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.9
Silberschatz, Galvin e Gagne ©2007
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!
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.10
Silberschatz, Galvin e Gagne ©2007
Algoritmo para o processo Pi
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.11
Silberschatz, Galvin e Gagne ©2007
Seção crítica usando locks
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.12
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.13
Silberschatz, Galvin e Gagne ©2007
Estrutura de dados para soluções de
hardware
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.14
Silberschatz, Galvin e Gagne ©2007
Solução usando GetAndSet
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.15
Silberschatz, Galvin e Gagne ©2007
Solução usando Swap
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.16
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.17
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.18
Silberschatz, Galvin e Gagne ©2007
Exemplo Java usando semáforos
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.19
Silberschatz, Galvin e Gagne ©2007
Exemplo Java usando semáforos
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.20
Silberschatz, Galvin e Gagne ©2007
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.
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.21
Silberschatz, Galvin e Gagne ©2007
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.
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.22
Silberschatz, Galvin e Gagne ©2007
Implementação de semáforo sem espera ocupada (cont.)

Implementação de acquire():

Implementação de release():
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.23
Silberschatz, Galvin e Gagne ©2007
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.
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.24
Silberschatz, Galvin e Gagne ©2007
Problemas clássicos de sincronismo



Problema de buffer limitado
Problema de leitores-escritores
Problema do jantar dos filósofos
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.25
Silberschatz, Galvin e Gagne ©2007
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.
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.26
Silberschatz, Galvin e Gagne ©2007
Problema de buffer limitado
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.27
Silberschatz, Galvin e Gagne ©2007
Problema de buffer limitado
Método insert()
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.28
Silberschatz, Galvin e Gagne ©2007
Problema de buffer limitado
Método remove()
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.29
Silberschatz, Galvin e Gagne ©2007
Problema de buffer limitado (cont.)

A estrutura do processo produtor
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.30
Silberschatz, Galvin e Gagne ©2007
Problema de buffer limitado (cont.)

A estrutura do processo consumidor
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.31
Silberschatz, Galvin e Gagne ©2007
Problema de buffer limitado (cont.)

A Factory
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.32
Silberschatz, Galvin e Gagne ©2007
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.
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.33
Silberschatz, Galvin e Gagne ©2007
Problema de leitores-escritores
Interface para locks de leitura-escrita
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.34
Silberschatz, Galvin e Gagne ©2007
Problema de leitores-escritores
Métodos chamados por escritores.
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.35
Silberschatz, Galvin e Gagne ©2007
Problema de leitores-escritores

A estrutura de um processo escritor
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.36
Silberschatz, Galvin e Gagne ©2007
Problema de leitores-escritores

A estrutura de um processo leitor
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.37
Silberschatz, Galvin e Gagne ©2007
Problema do jantar dos filósofos

Dados compartilhados
 Tigela de arroz (conjunto de dados)

Semáforo chopStick [5] inicializado com 1
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.38
Silberschatz, Galvin e Gagne ©2007
Problema do jantar dos filósofos (cont.)

A estrutura do Filósofo i:
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.39
Silberschatz, Galvin e Gagne ©2007
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)
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.40
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.41
Silberschatz, Galvin e Gagne ©2007
Sintaxe de um monitor
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.42
Silberschatz, Galvin e Gagne ©2007
Visão esquemática de um monitor
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.43
Silberschatz, Galvin e Gagne ©2007
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 ()
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.44
Silberschatz, Galvin e Gagne ©2007
Monitor com variáveis de condição
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.45
Silberschatz, Galvin e Gagne ©2007
Solução do jantar dos filósofos
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.46
Silberschatz, Galvin e Gagne ©2007
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)
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.47
Silberschatz, Galvin e Gagne ©2007
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.
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.48
Silberschatz, Galvin e Gagne ©2007
Sincronismo em Java
Cada objeto possui um conjunto de entrada associado.
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.49
Silberschatz, Galvin e Gagne ©2007
Sincronismo em Java
Métodos sincronizados insert() e remove()
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.50
Silberschatz, Galvin e Gagne ©2007
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.
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.51
Silberschatz, Galvin e Gagne ©2007
Sincronismo em Java
Entrada e conjuntos de espera
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.52
Silberschatz, Galvin e Gagne ©2007
Sincronismo em Java – buffer limitado
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.53
Silberschatz, Galvin e Gagne ©2007
Sincronismo em Java - buffer limitado
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.54
Silberschatz, Galvin e Gagne ©2007
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().
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.55
Silberschatz, Galvin e Gagne ©2007
Sincronismo em Java – leitoresescritores
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.56
Silberschatz, Galvin e Gagne ©2007
Sincronismo em Java – leitoresescritores
Métodos chamados pelos leitores
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.57
Silberschatz, Galvin e Gagne ©2007
Sincronismo em Java – leitoresescritores
Métodos chamados pelos escritores
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.58
Silberschatz, Galvin e Gagne ©2007
Sincronismo em Java
Ao invés de sincronizar um método inteiro, blocos
de código podem ser declarados como sincronizados
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.59
Silberschatz, Galvin e Gagne ©2007
Sincronismo em Java
Sincronismo de bloco usando wait()/notify()
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.60
Silberschatz, Galvin e Gagne ©2007
Recursos de concorrência em Java 5
Semáforos
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.61
Silberschatz, Galvin e Gagne ©2007
Recursos de concorrência em Java 5
Uma variável de condição é criada primeiro pela criação de
ReentrantLock e chamada do seu método newCondition():
Quando isso é feito, é possível invocar os métodos
await() e signal().
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.62
Silberschatz, Galvin e Gagne ©2007
Exemplos de sincronismo




Solaris
Windows XP
Linux
Pthreads
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.63
Silberschatz, Galvin e Gagne ©2007
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 leitoresescritores 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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.64
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.65
Silberschatz, Galvin e Gagne ©2007
Sincronismo no Linux


Linux:
 Desativa interrupções para implementar
seções críticas curtas
Linux oferece:
 semáforos
 spin locks
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.66
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.67
Silberschatz, Galvin e Gagne ©2007
Transações indivisíveis




Modelo do sistema
Recuperação baseada em log
Pontos de verificação
Transações indivisíveis simultâneas
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.68
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.69
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.70
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.71
Silberschatz, Galvin e Gagne ©2007
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)
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.72
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.73
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.74
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.75
Silberschatz, Galvin e Gagne ©2007
Schedule 1: T0 depois T1
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.76
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.77
Silberschatz, Galvin e Gagne ©2007
Schedule 2: Schedule seriável simultâneo
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.78
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.79
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.80
Silberschatz, Galvin e Gagne ©2007
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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.81
Silberschatz, Galvin e Gagne ©2007
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))
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.82
Silberschatz, Galvin e Gagne ©2007
Protocolo de ordenação de estampa de
tempo



Suponha que Ti execute write(Q)
 If TS(Ti) < estampa-R(Q), valor Q produzido por Ti 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
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.83
Silberschatz, Galvin e Gagne ©2007
Schedule possível sob protocolo de estampa
de tempo
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
6.84
Silberschatz, Galvin e Gagne ©2007
Final do Capítulo 6
Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006
Silberschatz, Galvin e Gagne ©2007
Download