Objetivos
- Reconhecer e explicar corridas em programas concorrentes.
- Aplicar monitores em programação concorrente com memória partilhada.
- Construir, avaliar e justificar sistemas distribuídos organizados segundo o paradigma cliente/servidor.
- Descrever arquiteturas e algoritmos de coordenação para sistemas distribuídos e propor a sua aplicação em contextos concretos.
Programa
- Introdução à programação concorrente: corridas e exclusão mútua.
- Programação concorrente com monitores: conceitos e problemas clássicos.
- Introdução aos sistemas distribuídos: conceitos e arquiteturas.
- Mecanismos de sistemas distribuídos: comunicação, serialização, nomes.
- Arquitetura cliente/servidor e invocação remota.
- Algoritmos de coordenação em sistemas distribuídos: tempo e relógios, exclusão mútua, difusão fiável.
Bibliografia
- The Art of Multiprocessor Programming. Maurice Herlihy, Nir Shavit, 2012.
- Distributed Systems: Principles and Paradigms, 2Ed Andrew S. Tanenbaum, Maarten Van Steen, 2006.
- Java Concurrency in Practice. Brian Goetz, Tim Peierls, Joshua Bloch, 2006
- Distributed Systems: Concepts and Design, 5Ed George Coulouris, Jean Dollimore, Tim Kindberg and Gordon Blair, 2011