Material Pedagógico
Conjunto de slides usados na aulas teóricas da UC no ano letivo 2025/2026
Races
Teste de Primalidade Paralela
Contador Partilhado
Procedimento para uma dada Thread
Implementação
Desafio
Locks
Interface de uso de Locks
Como implementar um Lock
Secções Críticas
Locks
Motivações para Locks
Exemplo
Primeira Tentativa
Multiplas Threads
Deadlock
Ordenação de Locks
Justiça
2PL
Lock de Coleção
Coleções com 2PL
Locks
Locks vs Variáveis
Variáveis Automáticas
Variáveis Globais/de Classe
Locks Encapsulados
Estado compartilhado vs estado local do thread
Quiz
Corridas de leitura
Coleções e 'getters'
Locks para Leitores e Escritores
Mutex
Deadlock
Starvation-Free
Soluções com 2 ou mais Threads
Algoritmo de Peterson
O Algoritmo de Filtro para n Threads
Starvation
Mutex
Algoritmo de Bakery
Conditions
Motivação
Variavel de Condição
Erros Comuns
Reader-Writer com Conditions
Justiça
Correções
Extra
Mutex com o Algoritmo de Peterson
Barreiras de Memória
Usos práticos
Condições vs Monitores
Introdução a Sistemas Distribuídos
Definição de Sistemas Distribuídos
Objetivos
Arquiteturas de Sistemas Distribuídos
Cliente-Servidor
Layered
Event-Based
Peer-to-Peer
Protocolos
Protobuf
Middleware
Comunicação
Modelo OSI
Camadas
Simplificação do Modelo
TCP/IP
Buffering na Comunicação TCP/IP
Sockets
Interfaces de Sockets em Java
MoM
Comunicação em Grupos
MPI
Serialização
Motivação
Texto vs Binário
Formatos Binários
Single Object vs Multiple Objects
Tipos Compostos
Implícito vs Explícito
Tipos Compostos
Program vs Data first
Código de Conversão
Versionamento
Streaming vs Object Model
Sumário
Arquiteturas de Clientes e Servidores
Motivação
RPC
Single-Threaded Server
Thread-Per-Connection Server
Thread-Per-Request Server
Thread Pool Server
Notificações e Implicações
Modelo Geral de Comunicação
Limitações do RPC
Migração de Código
Desafios
Virtualização
Computação na Nuvem
Computação na Periferia
Sumário
RPC
Exemplo
Paradigmas
Problemas principais
RPC/RMI
Cliente/Servidor com Sockets
Stubs
Naming
Geração de Stubs e Namings
Gestão de Excepções
Sumário
Sincronização de Relógios
Problemas com Relógios
NTP
RBS
Exclusão Mútua com Relógios Físicos
Problemas dos Timeouts
Modelo de Sistema Assíncrono
Causalidade
Relógios Lógicos de Lamport
Conclusão
Transações Distribuídas
Tolerancia a Falhas
Commit Transacional
2PC
Problemas do 2PC
3PC (ou TRPC)
Replicação
Quorum
Bully Algorithm
Consenso
Paxos
Sumário
Procura de Recursos
Sistemas Descentralizados
Procura Hierárquica
DHTs
Chord
Multicast
Problemas de Multicast
Abordagens para Multicast
Gossip
Gossip e Epidemias
Fanout vs Confiabilidade
Redundância
Sumário
Final
Resumo
Próximos Passos