Ficha de Disciplina

Disciplina: Sistemas Distribuídos
Período: 1º Semestre
Ano:
Creditos: 3
Ano Lectivo: 2002/2003
2a) Objectivos: Apresentar os conceitos teóricos que fundamentam os sistemas distribuídos genéricos.Apresentar as vantagens inerentes à distribuição de sistemas, a par dos desafios que se levantam à sua implementação.
2b) Programa: Introdução aos sistemas distribuídos e à computação em rede. Modelos de comunicação: troca de mensagens, invocação remota. Objectos distribuídos. Nomes: identificação e localização. Sincronização. Replicação, consistência e tolerância a falhas. Segurança. Infraestruturas de sistemas distribuídos.
2c) Bibliografia:  
Principal: Distributed Systems: Principles and Paradigms, A. S. Tanenbaum, M. van Steen, Prentice-Hall, 2002, ISBN 0-13-088893-1
Complementar: Distributed Systems: Concepts and Design, 3rd ed., G. Coulouris, J. Dollimore, T. Kindberg, Addison-Wesley, 2001, ISBN: 0-201-61918-0.
Advanced CORBA Programming with C++, M. Hennig, S. Vinoski, T., Addison-Wesley, 1999, ISBN: 0-201-37927-9. Unix Network Programming- Vols. 1 e 2, W. R. Stevens, Prentice-Hall, 1998, ISBN: 0-13-490012-X e 0-13-081081-9.
Advanced Programming in the Unix Environment, W. R. Stevens, Prentice-Hall, 1992, ISBN: 0-201-56317-7.
Metodologia: As aulas teóricas são de exposição, apresentadas normalmente com recurso a acetatos. A matéria exposta segue de perto a contida no livro de Tanenbaum e van Steen. Apontamentos ou artigos sobre as matérias não (devidamente) cobertas pela bibliografia indicada, serão fornecidos ou indicados à medida que for oportuno. A cadência de apresentação da matéria será tal que permita aos alunos adquirirem conhecimentos sólidos dos princípios fundamentais da área de Sistemas Distribuídos. Não se pretende a cobertura total da área (mesmo que tal fosse possível), pelo que ramificações do tema e aplicações específicas serão mencionadas mas não enfatizadas. Sempre que fôr adequado, exemplos que ajudem à compreensão dos tópicos serão apresentados. As aulas práticas terão duas componentes: uma, de exposição de certos pormenores de implementação e de utilização (com programação) de sistemas distribuídos; outra, de esclarecimento de dúvidas e de discussão de problemas e tópicos que tenham sido sugeridos para estudo extra-aulas. No período para além das aulas, os alunos serão convidados a resolver exercícios sugeridos, a aprofundar determinados tópicos e a experimentar e criar aplicações distribuídas simples, utilizando ferramentas disponíveis nos sistemas operativos actuais (e.g. rpcgen) ou do domínio público (e.g. Orbit), para o que utilizarão os recursos informáticos existentes no CICA e no DEEC. O sistema operativo clássico de referência é o Unix, nas suas variantes Linux e Digital Unix.
3a) Modo Avaliação: Avaliação distribuída com exame final.
3b) Componentes de Avaliação: Alunos em regime normal:
T - dois minitestes (escritos, 30 minutos de duração, sem consulta de documentação, 5 valores no total);
O - opinião dos docentes (baseada na assiduidade, interesse, trabalho e progresso de conhecimentos do aluno, 1 valor).
E - exame final (escrito, 2 horas de duração, sem consulta de documentação, 14 valores).
Alunos em regime especial:
EE - exame final (escrito, 2h30m de duração, sem consulta de documentação, 20 valores).
3c) Condições para obtenção de frequência: Não ultrapassagem do número limite de faltas e obtenção de um mínimo de 50% na soma das componentes T e O.
3d) Fórmula de cálculo da classificação final: Alunos em regime normal:
- 0.25*T + 0.05*O + 0.7*E
Alunos em regime especial:
- EE
3e) Provas e trabalhos especiais: Os alunos que pretenderem efectuar a melhoria de nota, nas épocas correspondentes, submeter-se-ão a um exame escrito cotado para 20 valores e com a duração de 2h30m.
Observações e comentários adicionais, incluindo pré-requisitos: Todas as provas escritas serão efectuadas sem consulta de documentação pessoal.

Como pré-requisitos que possibilitem o sucesso no aproveitamento da disciplina, espera-se que os alunos tenham
- conhecimentos de programação em C, C++ ou Java;
- conhecimentos de utilização de Unix;
- conhecimentos básicos de sistemas operativos.