Tinha eu 14 anos de idade quando meu pai me chamou Perguntou-me se eu queria estudar filosofia Medicina ou engenharia Tinha eu que ser doutor Mas a minha aspiração era ter um violão Para me tornar sambista Ele então me aconselhou: Sambista não tem valor, nesta terra de doutor E seu doutor, o meu pai tinha razão Vejo um samba ser vendido, o sambista esquecido O seu verdadeiro autor Eu estou necessitado, mas meu samba encabulado Eu não vendo não senhor! (PauZinho da Viola) Dedico este trabalho aos meus pais Zébédé e Clecy e às minhas irmãs Simone e Mônica pelo amor e incentivo dispensados ao longo de minha vida. ix
AgradecimentosEste trabalho é resultado de muito esforço e perseverança dispensados nestes últimos anos. Quando escrevo estas palavras, é inevitável o sentimento de orgulho de que finalmente cheguei ao fim dessa longa jornada e de gratidão àqueles que contribuíram ao sucesso dessa jornada. Gostaria de expressar minha sincera gratidão,• à minha família pelo apoio incondicional e compreensão de que eu precisava buscar os meus objetivos longe de casa.• à professora Cecília Rubira, pela sabedoria e coerência com que guiou esta jornada e pela paciência e amizade ao lidar com minhas dificuldades. Aproveito e agradeço também aos demais professores, funcionários e colegas do Instituto de Computação -UNICAMP pelos ensinamentos.• To Alexander Romanovksy and Professor Brian Randell, for the discussions we had while designing the Station Case Study, and for the contributions and suggestions to my research.• aos amigos que conheci e que sempre despertam meu respeito e admiração. A lista deles seria enorme; para não pecar pelo esquecimento, faço apenas referências gerais: amigos das inúmeras repúblicas em que morei; amigos da Pós-Graduação do Instituto de Computação -UNICAMP; demais amigos sempre presentes apesar da distância.• ao CNPq e à CAPES pelo apoio financeiro.• e, finalmente, a Deus por tudo que pedi e não recebi, pois o nada que eu ganhei era tudo que precisava.-MUITO OBRIGADO !!xi
ResumoSistemas computacionais complexos estão sujeitos a diferentes tipos de falhas, e a maneira mais adequada de lidar com tais falhas é aceitar que qualquer sistema pode apresenta-lás e empregar técnicas apropriadas para tolerá-las durante a execução do sistema. Desta forma, a abordagem mais apropriada para a construção de sistemas complexos confiáveis consiste na utilização de técnicas de tolerância a falhas que nos permitem definir regiões de confinamento e recuperação de erros. No entanto, técnicas de tolerância a falhas são geralmente utilizadas na fase de implementação do ciclo de desenvolvimento do sistema. Desta forma, não é freqüentemente fácil empregá-las, desde que projetistas necessitam levar em conta muitos detalhes de implementação. Neste contexto, este trabalho faz duas contribuições relevantes. A primeira contribuição é a utilização prática de técnicas recentes de estruturação de sistemas na definição de uma arquitetura de software genérica para introduzir atomicidade, redundância de software, tratamento de exceçõe...