Notas de Aula - MAC 5755 - Sistemas Operacionais Distribuídos
Aula 21 - 31/10/2001
Transações Atômicas
-
Semáforos e locks 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
-
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
-
Protocolo Commit de Duas Fases (Two-Phase Commit Protocol)
-
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
-
Implementação de Transações:
-
Área de trabalho provada:
-
quando trans. modifica algo, uma cópia é gerada e a trans.
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 trans.
-
Write-ahead Log (Lista de Intenções)
-
faz as mudanças diretamten 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
-
leituras e escritas prematuras
-
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 withdrawCash(double amount) {
//primeiro
pegamos uma referencia para a transacao deste bean
UserTransaction
ut = context.getUserTransaction();
try
{
ut.begin();
updateChecking(amount);
machineBalance -= amount;
insertMachine(machineBalance);
ut.commit();
}
catch (Exception ex) {
try {
ut.rollback();
} catch (SystemException syex) {
throw new EJBException
("Rollback failed: " + syex.getMessage());
}
throw new EJBException
("Transaction failed: " + ex.getMessage());
}
}
Referências
Próxima Aula
Aula Anterior
Página de MAC 5755
Página do Fabio
Página do DCC