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):

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.