Notas de Aula - MAC 5755 - Sistemas Operacionais Distribuídos
Aula 20 - 5/10/2001
Transações Atômicas
-
Semáforos e bloqueios funcionam bem mas são muito baixo
nível,
de difícil programação, fácil de cometer
erros
-
Transações são uma forma mais eficiente de
controlar
o acesso concorrente a um grupo de recursos
-
Exemplo de atualização perdida: Galli, pag. 210, quadro
9.1.
-
Operações básicas em transações:
-
begin_transaction
-
end_transaction
-
abort_transaction
-
read / receive (ou qualquer outra operação)
-
write / send
-
Propriedades ACID:
-
Atomicidade
-
transferência de dinheiro em uma conta corrente é composta
por duas operações:
-
saque (x, poupança); deposito (x, conta_corrente);
-
Consistência
-
consistência do sistema é mantida (e.g. quantidade total
de
dinheiro no banco é constante em transações
intra-banco)
-
Isolamento (ou seriabilidade)
-
transações concorrentes não interferem umas com as
outras
-
exemplo: Tanenbaum 3-17, pag. 149
-
Durabilidade
-
depois do commit, mudanças são estáveis,
permanentes
-
Protocolo Commit de Duas Fases (Two-Phase Commit Protocol)
(também conhecido como Consolidação em Duas Fases)
-
Gray (1978)
-
usado quando
-
a transação envolve múltiplas partes em nós
diferentes de um sistema distribuído
-
todos os nós precisam conhecer o resultado da
transação
-
fases:
-
preparação para o commit
-
commit
-
Transações Aninhadas
-
pode-se definir uma árvore de transações e
sub-transações
-
possibilita melhorias em
-
desempenho
-
tolerância a falhas
-
simplificação da programação
- mas aumenta consideravelmente a complexidade da
implementação do suporte às
transações
-
Implementação de Transações:
-
Área de trabalho privada:
-
quando transação modifica algo, uma cópia é
gerada e a transação
passa a enxergar a cópia.
-
abort -> joga cópia fora
-
commit -> cópia vira versão oficial e passa a ser
visível
por quem está fora da transação.
-
Write-ahead Log (Lista de Intenções)
-
faz as mudanças diretamente com os dados oficiais
-
mas cria um log de tudo
-
com o log pode se ir prá trás (rollback) ou
prá
frente na trans. (Tanenbaum 3-19, pag. 152)
-
Dificuldades encontradas para implementação de
transações
-
escritas prematuras (pouco grave)
- leituras prematuras (muito grave)
-
efeito dominó nos aborts (conseqüência de
leituras
prematuras)
CORBA
-
CORBA OTS: Object Transaction Service
-
serviço bem completo e sofisticado
-
disponível em muitos ORBs mas não todos
-
em particular, está implementado no J2EE
Java
-
Java Transaction Service (JTS)
-
oferece a interface Java: Java Transaction API (JTA) (alto nível)
-
implementa o CORBA OTS e usa IIOP em sua comunicação
interna
(baixo nível)
-
Exemplo em Enterprise Java Beans, pacote javax.transaction:
public void saqueNoCaixaAutomático(double quantia) {
//primeiro
pegamos uma referência para a transação deste bean
UserTransaction
ut = context.getUserTransaction();
try
{
ut.begin();
retiraDaConta(quantia);
saldoNoCaixaAutomático -= quantia;
ejete(quantia);
ut.commit();
}
catch (Exception ex) {
try {
ut.rollback();
} catch (SystemException syex) {
throw new EJBException
("Erro grave: Rollback falhou. " + syex.getMessage());
}
throw new EJBException
("Transação falhou: " + ex.getMessage());
}
}
Referências
Próxima Aula
Aula Anterior
Página de MAC 5755
Página do Fabio
Página do DCC