S I S T E M A S     D I S T R I B U Í D O SDisciplina do Mestrado/Doutorado em Informática e Optativa do BCC/IBM
Prof. Elias P. Duarte Jr.
 
 
Departamento de Informática
 
 
UFPR
Novidade: os Capítulos 3 e 4 foram disponibilizados! Durante a greve não haverá aula, exceto nossa Prova 1 no dia 25 de abril de 2024 (quinta-feira, sala a ser divulgada). O Trabalho Prático 1 deve ser enviado até o dia 2 de maio de 2024 (quinta-feira) -- veja as instruções abaixo, inclusive o "assunto" para o email ("TP1 SISDIS 2024-1") entre outros detalhes. Caríssimos alunos: confirmando que estarei hoje (16 de abril de 2024) na sala de aula com notebook (todos os alunos que tiverem notebooks tragam por favor!) para fazermos um laboratorio de SMPL. Aguardo todos vcs às 17:30hs, na sala de aula! Caros alunos: Confirmando que haverá aula de Sistemas Distribuídos normalmente na terça-feira 02 de abril de 2024! Às 17:30 estarei aguardando todos vocês na nossa sala de aula, Auditório 2. Cheguei a comentar com alguns alunos que talvez não teríamos aula, mas a situação se resolveu e vamos ter aula sim. Por favor me ajudem a divulgar para a turma! Atenção pessoal: não haverá aula nos dias 12 e 14 de março de 2024 (terça e quinta), o Prof. Elias estará fora de Curitiba em congresso. Todos os AVISOS serão postados aqui. Horário: Terças e Quintas, 17:30hs Sala: Anfiteatro A, Bloco PC
Prova 1: 25 de abril de 2024 (quinta-feira, na hora da aula, em sala a ser divulgada)
Prova 2: de junho de 2024 (quinta-feira, na hora da aula, na sala de aula) Prova Final: de junho de 2024 (terça-feira, na hora da aula, na sala de aula)
Avaliação: 2 provas de 35 pontos cada; trabalho prático em 2 etapas, valendo 30 pontos no total.
Módulo 1  
Módulo 2  
Módulo 3  
Módulo 4  
Módulo 5 e 6  
Módulo 7  
Módulo 8  
Módulo 9  
Capítulo 1: Introdução aos Sistemas Distribuídos
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. Na página Web do Trabalho Prático 1, por favor incluam links para as 5 Tarefas indicadas na aula de laboratório (tempo.c mais 4 seguintes). Para cada uma das Tarefas inclua um pequeno log, mostrando que a Tarefa executou corretamente. TRABALHO PRÁTICO 1 Especificação: Implemente o detector de falhas vCube (versão 2) no ambiente de simulação SMPL, e mostre resultados para diversos valores de N e diversos eventos. Um evento consiste da mudança de estado de um processo; o evento seguinte só ocorre quando o evento anterior já tiver sido completamente detectado. Para cada evento mostre claramente a latência tanto em tempo de simulação como em rodadas de testes para todos os processos corretos detectarem cada evento. Cada processo mantém o vetor STATE[0..N-1] de contadores de eventos, inicializado em -1 (estado “unknown”). Assume-se que os processos são inicializados corretos (estado 0), a entrada correspondente ao próprio processo no vetor STATE[] do testador é setada para zero. Ao descobrir um novo evento em um nodo testado, o testador incrementa a entrada correspondente no vetor STATE[]. Implemente o vCube de forma que em cada intervalo de testes todos os logN clusters são testados. Na verdade, cada testador executa todos os seus testes assinalados em cada intervalo de testes. Para a transferência de informações de estado, faça da seguinte maneira: ao testar um processo sem-falha o testador lê o vetor State[] do processo testado e obtém informações sobre novidades. É importante comparar as entradas correspondentes dos vetores STATE (testador e testado) para saber se o testado tem alguma novidade. Se o valor da entrada for maior no vetor STATE do processo testado, então copia a informação. Atenção: a data para disponibilizar o trabalho é 2 de maio de 2024 (não serão aceitos trabalhos fora do prazo!) Os alunos devem informar por e-mail a URL do trabalho, usando o subject "TP2 SISDIS 2024-1"
Alunos de pós-graduação devem fazer o trabalho individualmente, alunos de graduação podem fazer em dupla.
Deve ser feita uma página Web, que contém:
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:
Em outros semestres os tópicos já incluiram:
smpl.c
 
 
 
 
smpl.h
 
 
 
 
rand.c
 
 
 
 
tempo.c
 
 
 
 
makefile
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:
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:
Alguns dos artigos importantes neste semestre são:
|