O design gráfico na revista Illustração Paranaense: uma aproximação coerente
intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas...
Transcript of intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas...
![Page 1: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/1.jpg)
Sistemas Distribuídos�
INF2545
![Page 2: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/2.jpg)
Sistemas Distribuídos
• o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo de usuário?
» programador é usuário? • o que é "coerente"?
» o conceito de transparência
• um sistema distribuído é uma coleção de máquinas independentes que são usadas em conjunto para executar uma tarefa ou prover um serviço.
![Page 3: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/3.jpg)
para que queremos SDs?
• custo e desempenho • paralelismo e computação distribuída
• escalabilidade • facilidade de aumentar recursos
• distribuição inerente • dispersão geográfica e social • compartilhamento de recursos
• confiabilidade • redundância
![Page 4: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/4.jpg)
mas...
• rede tem que ser levada em consideração • desempenho e falhas
• segurança • distribuição introduz problemas inexistentes em sistemas
centralizados
• complexidade de software
![Page 5: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/5.jpg)
arquiteturas de interesse
• multicomputadores: cada um com sua memória e processador, interligados por redes • construção de aplicação distribuída sobre recursos de redes de
SO pode ser árdua
kernel SO kernel SO
aplicação distribuída
![Page 6: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/6.jpg)
SOs distribuídos
• interesse especial nos anos 80
• sistemas que controlariam o conjunto de recursos de várias máquinas • remanescentes importantes:
» servidores de arquivos, técnicas de segurança, ...
kernel SO
aplicação distribuída
kernel SO
sistema operacional distribuído
![Page 7: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/7.jpg)
Middleware
• serviços e abstrações que facilitam o desenvolvimento de aplicações distribuídas
aplicação distribuída
middlleware
kernel SO kernel SO
![Page 8: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/8.jpg)
estudo de SDs
• livros clássicos de sistemas distribuídos • comunicação entre processos • sincronização • sistemas de arquivos • segurança • confiabilidade
• nesse curso, maior ênfase na programação de SDs
![Page 9: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/9.jpg)
programação
• requisitos de diferentes ambientes • redes locais e geográficas • baixo e alto acoplamento
• facilidades de programação importantes para diferentes classes de aplicações • ou mesmo para diferentes interações dentro da mesma
aplicação
• necessidades • modelos de programação suportados:
» cliente-servidor, p2p, computação móvel, ... • interesse especial em Lua e contribuição de linguagem
interpretada
![Page 10: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/10.jpg)
programa do curso • Introdução
• processos e concorrência. threads. eventos.
• Comunicacão • troca de Mensagens. abstrações. chamada remota de procedimentos e métodos. publish/subscribe. comunicação
em grupo. • código móvel
• Arquiteturas • cliente-servidor • p2p • agentes móveis • eventos...
• Sincronização e Coordenação • multicast confiável e ordenado • exclusão mútua
• Outros • nomes • segurança • replicação • tolerância a falhas
![Page 11: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/11.jpg)
discussão
• facilidade de desenvolvimento
• desempenho
• transparência
• escalabilidade
• flexibilidade
![Page 12: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/12.jpg)
Avaliação
• 4 trabalhos (implementação) - grupo
• resumos e críticas de artigos - individuais
• 1 prova – individual
![Page 13: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/13.jpg)
Bibliografia
• A. Tanenbaum e M. van Steen. Distributed Systems: Principles and Paradigms. Prentice-Hall, 2002.
• G. Andrews. Foundations of Multithreaded, Parallel, and Distributed Programming. Addison-Wesley, 2000.
• surveys e artigos • alguns “clássicos”:
» Andrews, Gregory. Paradigms for Process Interaction in Distributed Programs. ACM Computing Surveys , 23(1), mar 91
» Briot, J., Guerraoui, R., and Lohr, K. 1998. Concurrency and distribution in object-oriented programming. ACM Comput. Surv. 30 (3). set 98.
• outros
• Roberto Ierusalimschy. Programming in Lua. lua.org, 2006.
![Page 14: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/14.jpg)
introdução
• processos e concorrência
![Page 15: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/15.jpg)
Processos e Concorrência
• processo: modelo de execução sequencial • "programa em execução" • código, dados globais, pilha de execução • estrutura presente em qualquer sistema operacional
• concorrência • modelo de linhas "simultâneas" de execução
• concorrência e distribuição • aplicações distribuídas envolvem a execução concorrente de
processos em várias máquinas • uso de concorrência local:
» atendimento a comunicações concorrentes » sobreposição de comunicação e processamento
![Page 16: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/16.jpg)
alternativas p/ concorrência
1. multithreading • várias linhas de execução compartilham globais com
escalonamento preemptivo • surgido de estudos de sistemas operacionais • dificuldades de sincronização • exemplos: threads em C (posix) e em Java
![Page 17: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/17.jpg)
exemplo em Java
public class ThreadsDorminhocas {
public static void main(String[] args) {
new ThreadDorminhoca("1");
new ThreadDorminhoca("2");
new ThreadDorminhoca("3");
new ThreadDorminhoca("4");
}
}
![Page 18: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/18.jpg)
threads em Java class ThreadDorminhoca extends Thread { int tempo_de_sono; public ThreadDorminhoca(String id) { super(id); tempo_de_sono = (int) (Math.random() * 5000); System.out.println("Tempo de sono da thread "+id+ ": "+tempo_de_sono+"ms"); start(); } public void run() { try { sleep(tempo_de_sono); } catch(InterruptedException exception) { System.err.println(exception); } System.out.println("thread "+getName()+" acordou!"); } }
transferência de controle implícita! (preempção)
![Page 19: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/19.jpg)
condições de corrida
class Conta { private int saldo; public Conta (int ini) { saldo = ini; } public int veSaldo() { return saldo; } public void deposita(int dep) { for (int i=0; i<dep; i++) { // artificial!! saldo++; } } }
![Page 20: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/20.jpg)
condições de corrida
public class ThreadsEnxeridas { public static void main(String[] args) { int repet = 20; Conta cc = new Conta(0); (new ThreadEnxerida("1", cc, repet)).start(); (new ThreadEnxerida("2", cc, repet)).start(); (new ThreadEnxerida("3", cc, repet)).start(); (new ThreadEnxerida("4", cc, repet)).start(); } }
![Page 21: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/21.jpg)
condições de corrida class Conta { private int saldo; public Conta (int ini) { saldo = ini; } public int veSaldo() { return saldo; } synchronized public void deposita(int dep) { for (int i=0; i<dep; i++) { try { Thread.sleep(10); // para escalonador agir! } catch(InterruptedException exception) { System.err.println(exception); } saldo++; } } • }
![Page 22: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/22.jpg)
alternativas ao modelo multithread clássico
2. modelos orientados a eventos • cada evento tratado até o final • programa como máquina de estado
3. multitarefa sem preempção • co-rotinas em Lua
4. multithreading com troca de mensagens • Erlang
![Page 23: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/23.jpg)
alternativas p/ concorrência
• eventos - descrição Ousterhout:
![Page 24: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/24.jpg)
orientação a eventos: ALua
• assincronismo e distribuição geográfica
• ALua: sistema para programação distribuída • baseado em Lua • chegada de mensagem é um evento • tratamento é execução da mensagem recebida
alua.send(B, [[send(A, “print(‘.. c..’)”)]]) A B
[[send(A, “print(‘.. c..’)”)]]!
send(A, “print(‘.. c..’)”)!
c
“print(10)”!print(10)!
10!
alua.inf.puc-rio.br
![Page 25: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/25.jpg)
co-rotinas em Lua
function boba () for i=1,10 do print("co", i) coroutine.yield() end end co = coroutine.create(boba)
coroutine.resume(co) -> co 1 coroutine.resume(co) -> co 2 … coroutine.resume(co) -> co 10 coroutine.resume(co) -> nada… (acabou)
transferência de controle explícita! Menos problemas com condições de corrida!
![Page 26: intronoemi/sd-09/intro.pdf · Sistemas Distribuídos • o que são: "coleção de máquinas independentes que aparecem para o usuário como um único sistema coerente" • que tipo](https://reader034.fdocumentos.com/reader034/viewer/2022051603/5c0d858e09d3f20b788b90e9/html5/thumbnails/26.jpg)
Referências
• notas de aula Ihor Kuz, Manuel M. T. Chakravarty & Gernot Heiser (intro-notes.pdf, na página do curso*)
• J. Ousterhout. Why threads are a bad idea (for most purposes)
• capítulo de co-rotinas - livro de Lua • Roberto Ierusalimschy. Programming in Lua. lua.org, 2006.
» disponível na secretaria do DI » 1a ediçãodisponível em www.lua.org/pil/
*inf.puc-rio.br/~noemi/sd-09/