Table of Contents
Fundamentos de Sistemas Paralelos e Distribuídos (2020-1,2020-2,2021-1)
Disciplina ofertada para o BCC(OB), BSI e BMC (OP).
Vídeos sobre todos os pontos da matéria podem ser encontrados na playlist da disciplina no youtube.
Maiores informações estão disponíveis na página do curso no moodle a cada semestre.
Objetivo
Esta disciplina tem por objetivo apresentar os fundamentos de sistemas paralelos e distribuídos juntamente com algumas das tecnologias usadas na sua implementação e aplicações dos vários fundamentos. A disciplina também irá discutir modelos e técnicas mais recentes, inclusive algumas relacionadas a “big data” e computação em nuvem, mas o foco principal será na teoria geral.
Descrição
A quase totalidade dos sistemas computacionais que utilizamos hoje em dia são paralelos e/ou distribuídos, se considerarmos desde máquinas multi-core até sistemas baseados na Internet. Ao mesmo tempo, a diversidade de aplicações que são paralelas e/ou distribuídas é imensa e crescente, embora muitos fundamentos continuam sendo um pilar fundamental para a construção desses sistemas e aplicações. Neste contexto, esta disciplina tem por objetivo familiarizar os alunos com os fundamentos que serão necessários para o restante do curso, assim como discutir o estado-da-arte nessas áreas.
Ementa
- Fundamentos de computação distribuída
- Fundamentos de computação paralela
- Tendências
Programa
Introdução
- Taxonomia de Flynn. Ley de Amdahl. Speedup.
- Memória compartilhada vs. memória distribuida.
- Paralelismo de dados x tarefas
- Arquiteturas de sistemas paralelos e distribuídos (cliente-servidor, mestre-escravo, par-a-par, etc.)
Computação Paralela
- Programação com variáveis compartilhadas
- Condições de corrida; sincronização de processos.
- Exclusão mútua e sessões críticas
- Deadlocks e outros princípios
- Abstrações de programação: sessões críticas, semáforos, monitores
Computação Distribuída
- Arquitetura de sistemas distribuídos
- Paradigmas de comunicação: troca de mensagens, sistemas de filas de mensagens, chamadas de procedimentos remotos (RPC)
- Sistemas de nomes
- Coordenação, tempo e relógios lógicos
- Consistência e replicação
- Princípios de tolerância a falhas
Avaliação
Durante o período de Ensino Remoto Emergencial, a avaliação é constituída por:
- questionários de fixação do conteúdo, publicados a cada semana de aula, para serem entregues na semana seguinte;
- dois exercícios de programação, um em memória compartilhada, outro em memória distribuída;
- duas provas (take home).
Bibliografia
Bibliografia adotada (ambos os livros adotados estão disponíveis gratuitamente nos sites dos autores):
- Sistemas Operacionais: Conceitos e Mecanismos, Carlos Maziero, 1a. Ed., DINF-UFPR, 2019
- Distributed Systems, van Steen e Tanenbaum, 3rd. Ed., van Steen Pub., 2017
Bibliografia adicional (apenas para o caso de alguém desejar se aprofundar em algum tópico):
- M. Ben-Ari. Principles of Concurrent and Distributed Programming, Prentice Hall, 1990.
- G. Couloris, J. Dollimore, T. Kindberg, Sistemas Distribuídos: Conceito e Projeto, Bookman, 2007.
- B. Wilkinson and M. Allen, Parallel Programming: Techniques and Applications Using Networked Workstations and Parallel Computers, Prentice Hall, 2nd Edition, 2004
- D. Comer and S. Stevens, Inter-networking with TCP/IP Vol III: Client-Server Programming and Applications, 3rd edition, Prentice Hall, 1999.
- Stevens, W. Richard, Unix Network Programming, Prentice-Hall, 2nd Edition, 1998
- G. Andrews, Foundations of Multithreaded, Distributed, and Parallel Programming, Addison Wesley, 1999.