S I S T E M A S     D I S T R I B U Í D O S
Disciplina do Mestrado/Doutorado em Informática e Optativa do BCC/IBM
Prof. Elias P. Duarte Jr.
 
 
Departamento de Informática
 
 
UFPR
| Disciplina
INFO7046 (Mestrado/Doutorado) e CI1088 (Optativa Bacharelados IBM e BCC)
|
|
2o período de 2026: o Prof. Elias não está ministrando esta disciplina neste semestre |
Todos os AVISOS serão postados aqui.
Horário: terças e quintas, 15:30 às 17hs Sala: a definir
Prova 1: de abril de 2027 (quinta-feira, na hora da aula, na sala de aula)
Prova 2: de junho de 2027 (terça-feira, na hora da aula, na sala de aula)
Prova Final: de julho de 2027 (terça-feira, na hora da aula, na sala de aula)
Avaliação: 2 provas de 40 pontos cada; 1 trabalho prático valendo 20 pontos.
|
As Aulas - cada módulo pode cobrir várias aulas
|
Na seção 7 deste artigo estão definidos os detectores de falhas vRing e vCube, além da força-bruta Vejam também os slides sobre vRing e vCube, além dos cadernos com anotações das aulas!
|
O Trabalho Prático: a definir
|
Deve ser feita uma página Web, que contém:
- Relatório HTML explicando o algoritmo proposto, e descrevendo todos os itens solicitados acima (use desenhos,
palavras, o que você quiser): o objetivo é detalhar as suas decisões
para implementar seu trabalho.
- Código fonte dos programas, comentados.
ATENÇÃO: acrescente
a todo programa a terminação ".txt" para que possa ser diretamente aberto em um
browser. Exemplos: cliente.py.txt ou servidor.c.txt
- Log dos testes executados: mostre explicitamente diversos
casos testados, lembre-se é a partir desta listagem de testes que
o professor vai medir até que ponto o trabalho está funcionando.
Veja este programa exemplo
para ilustrar a criação de um bom log.
TRABALHO PRÁTICO 0: Roteiro de Aprendizado Prático de Simulação
Tarefas para aprender a usar nossa ferramenta de simulação, o SMPL.
Tarefa 0: digitar, compilar e executar o programa exemplo, tempo.c
Tarefa 1: Fazer cada um dos processos testar o seguinte no anel.
Implemente o teste com a função status() do SMPL e imprimir
(printf) o resultado de cada teste executado. Por exemplo: “O processo
i testou o processo j correto no tempo tal.”
Tarefa 2: Cada processo correto executa testes até achar outro processo correto. Lembre-se de tratar o caso em que todos os demais processos estão falhos. Imprimir os testes e resultados.
Tarefa 3: Cada processo mantém localmente o vetor State[N]. A entrada do vetor State[j] indica
o estado do processo j. O estado de cada processo
pode ser: -1 (unknown), 0 (correto) ou 1 (falho). Inicialize (para todos os processos)
o State[N] com -1 (indicando estado “unknown”) para todos os demais
processos e 0 para o próprio processo. Nesta tarefa ao
executar um teste em um processo j, o testador atualiza a entrada correspondente no vetor
State[j]. Em cada intervalo de testes, mostre o vetor State[N].
Tarefa 4: Quando um processo correto testa outro processo correto obtém
as informações do estado dos demais processos do sistema,
processos do sistema exceto aqueles que testou nesta rodada, além do
próprio testador.
| Informações
sobre a Disciplina Sistemas Distribuídos
|
Mestrado e Doutorado em Informática: é pré-requisito para a disciplina do Mestrado, Sistemas Distribuídos
(CI721), o aluno ter domínio de Programação de Computadores com a
linguagem C em ambiente Unix (Linux).
Bacharelado em Ciência da Computação: A disciplina Redes de Computadores II (CI061) é Pré-Requisito obrigatório
para o aluno poder se matricular em Tópicos em Sistemas Distribuídos
(CI088).
Esta é uma disciplina com ênfase em algoritmos distribuídos clássicos &
tolerância a falhas. Os tópicos cobertos em cada semestre incluem os seguintes.
Neste período os tópicos serão os seguintes:
- Introdução aos Sistemas Distribuídos
- Modelos Temporais: Sistemas Síncronos, Assíncronos e Parcialmente Síncronos
- Confiança no Funcionamento de Sistemas (Dependability) e Modelos de Falhas
- O Consenso e os Detectores de Falhas
- Algoritmos do Anel Virtual e Hipercubo Virtual: vRing & vCube
- Ordenação de Eventos e Relógios Lógicos
- Difusão Confiável, FIFO, Causal e Atômica
- Eleição de Líder em Sistemas Parcialmente Síncronos
- Replicação Máquina de Estados
- O Algoritmo de Consenso Paxos
Em outros semestres os tópicos já incluiram:
- Exclusão Mútua Distribuída
- O Problema dos Generais Bizantinos
- Transações Atômicas Distribuídas
- Replicação Distribuída
- Ordenação de Eventos e Relógios Lógicos
- Comunicação em Grupo (Group Membership)
- Sincronização de Relógios
- CheckPointing & Rollback
- Particionamento & Recuperação de Redes de Topologia Arbitrária
- Segurança no Contexto de Sistemas Distribuídos
Interface para o VISUAL VCUBE
|
Simulation Programming Language - Biblioteca C, C++ para Simulação
baseada em Eventos Discretos |
smpl.c
 
 
 
 
smpl.h
 
 
 
 
rand.c
 
 
 
 
tempo.c
 
 
 
 
makefile
hipercubo.c
 
 
 
 
cisj.c
Não há um único livro texto para esta disciplina. Alguns dos tópicos
aparecem em livros, outros em artigos. Uma lista de livros sugeridos segue abaixo:
- A. D. Kshemkalyani, M. Singhal, Distributed Computing: Principles,
Algorithms, and Systems, Cambridge U. Press, 2008.
- C. Cachin, R. Guerraoui, L. Rodrigues, Introduction to Reliable and
Secure Distributed Programming, Springer, 2011.
- S. Mullender (Editor), Distributed Systems, 2nd Edition, ACM Press, 1993.
- P. Jalote, Fault Tolerance in Distributed Systems, Prentice-Hall, 1994.
- D. K. Pradhan (Editor), Fault-Tolerant Computer System Design, Prentice-Hall, 1996.
- B. Charron-Bost, F. Pedone, A. Schipper (Editors) Replication: Theory and
Practice, Springer, 2010.
Neste período vamos usar em parte da disciplina o livro "Introduction to Reliable Distributed
Programming" que está disponível em versão digital na Biblioteca da UFPR. Para acessar o pdf faça:
- Acesse o Portal da UFPR
- No campo "Busca Integrada ao Acervo UFPR", digite: "Introduction to Reliable Distributed Programming"
- Verifique se o seletor está selecionado "Todo o Conteúdo"
- Pressione o botão "Pesquisar"
- Na nova guia que abrir, selecione o primeiro item da resultante da busca
- Role a página um pouco até encontrar o campo "Acesso online:"
- Clique no link ao lado deste campo recém encontrado
- Uma nova aba abrirá, nesta clique no botão Download Book(PDF, 2432 KB)
Alguns dos artigos importantes neste semestre são:
- Algirdas Avizienis, Jean-Claude Laprie, Brian Randell, Carl
E. Landwehr, "Basic Concepts and Taxonomy of Dependable and Secure
Computing," IEEE Transations on Dependable and Secure Computing,
pp. 11-33, Vol. 1, No. 1, 2004.
- Michael J. Fischer, Nancy A. Lynch, and Michael
S. Paterson, "Impossibility of Distributed Consensus with One Faulty
Process," Journal of the ACM (JACM), Vol. 32, No. 2, pp. 374-382, 1985.
- Tushar D. Chandra, Sam Toueg, "Unreliable Failure
Detectors for Reliable Distributed Systems," Journal of the ACM (JACM),
Vol. 43, No. 2, pp. 225-267, 1996.
- Michel Raynal, "A Short Introduction to Failure Detectors for
Asynchronous Distributed Systems," ACM SIGACT News, Vol. 36, No. 1, pp. 53-70, 2005.
- Elias P. Duarte Jr., Luiz A. Rodrigues, Edson T. Camargo, Rogerio Turchetti,
"A Distributed System-level Diagnosis Model for the Implementation of Unreliable Failure Detectors,"
CoRR abs/2210.02847, 2022. [arXiv link with pdf]
- Ronald P. Bianchini Jr., Richard W. Buskens, "Implementation of
On-Line Distributed System-Level Diagnosis Theory," IEEE Transactions
on Computers, pp. 616-626, Vol. 41, No. 5, 1992.
- Elias P. Duarte Jr., Takashi Nanya, "A Hierarchical Adaptive Distributed
System-Level Diagnosis Algorithm," IEEE Transactions on Computers,
Vol. 47, No. 1, pp. 34-45, 1998.
- Elias P. Duarte Jr., Luis C. E. Bona, Vinicius K. Ruoso, "VCube:
A Provably Scalable Distributed Diagnosis Algorithm," Workshop on Latest
Advances in Scalable Algorithms for Large-Scale Systems (ScalA), at The
Supercomputing Conference 2014 (SC'2014), pp. 1-8, New Orleans, USA, 2014.
- Fred B. Schneider, "Implementing Fault-Tolerant Services Using the State Machine Approach:
A Tutorial," ACM Computing Surveys, pp. 299-319, Vol. 22, No. 4, 1990.
UFPR  
Departamento de Informática  
Prof. Elias P. Duarte Jr.
|