Ir para o conteúdo

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