280 likes | 417 Views
Programação Concorrente e Distribuída/Especificação de Sistemas Distribuídos. Alexandre Mota/Augusto Sampaio {acm, acas}@cin.ufpe.br. Motivação. Lidar simultaneamente com várias tarefas não é simples Memória compartilhada ou troca de mensagens Deadlock, livelock e não-determinismo
E N D
Programação Concorrente e Distribuída/Especificação de Sistemas Distribuídos Alexandre Mota/Augusto Sampaio {acm, acas}@cin.ufpe.br
Motivação • Lidar simultaneamente com várias tarefas não é simples • Memória compartilhada ou troca de mensagens • Deadlock, livelock e não-determinismo • Especificação muito longe da implementação • Programação é complicada devido aos detalhes e possíveis erros
Objetivo • Introduzir alguns conceitos fundamentais • Concorrência com memória compartilhada • Modelar sistema concorrente e/ou distribuído usando linguagem de especificação CSP • Analisar suas propriedades • Detalhar (refinar) a especificação até chegar em implementação (JCSP/UML-RT)
Conceitos Fundamentais • Programa concorrente • 2 ou mais processos trabalham simultaneamente para realizar tarefa • Processo • É um programa seqüencial (seqüência de comandos executados um após o outro) Programação Concorrente e Distribuída
Programas Concorrentes • Processos comunicam-se através de • Variáveis compartilhadas • Passagem de mensagens • E sincronizam por • Exclusão mútua • Seções críticas não devem executar ao mesmo tempo • Sincronização condicional • Retarda um processo até uma dada condição ser true Programação Concorrente e Distribuída
Comunicação • Passagem de mensagens • Modelo de mais alto nível • Erros são mais simples de resolver • Baixa performance em geral • Compartilhamento de memória • Modelo de mais baixo nível • Erros são mais delicados de resolver • Alta performance
Conceitos Fundamentais • Ação Atômica • Ações indivisíveis que acessam ou alteram o estado do programa • Load/store (memória) • Instrução de máquina que não pode ser interrompida • Processo: seqüência de comandos • Comando: seqüência de ações atômicas Programação Concorrente e Distribuída
Conceitos Fundamentais • História (trace) • Execução particular de um Prog. Conc. pode ser vista como uma história • Interleaving de seqüências de ações executadas por cada processo • Sejam s0 um estado inicial, sn um estado subseqüente e uma transição causada por uma açao atômica • s0 s1 ... sn • Execução paralela pode ser modelada como uma história linear Programação Concorrente e Distribuída
Propriedades • Fato verificado em todas as histórias • Tipos • Propriedades de segurança • Nunca entra em um estado ruim • Propriedades de liveness • Eventualmente um estado bom é alcançado Programação Concorrente e Distribuída
Propriedades • Segurança • Corretude Parcial • Estado final está correto • Se o programa terminar • Liveness • Terminação • Todo laço e chamada de procedimento terminam (toda história é finita) • Corretude Total • Combina a parcial com terminação • Sempre termina com uma resposta correta Programação Concorrente e Distribuída
Concorrência com Memória Compartilhada • Seção crítica/exclusão mútua • Spin locks • Barreiras • Semáforos • Monitores
CSP • Notação conveniente para modelar sistemas concorrentes • Alto nível de abstração • Ferramentas para analisar propriedades automaticamente • Possui biblioteca para Java (JCSP)
Projeto 1 • Escolher sistema concorrente para ser especificado • A partir da modelagem, estudar as seguintes propriedades clássicas: deadlock, livelock e determinismo • Na presença indesejável, ajustar o modelo • Resultado: modelo e análises básicas
JCSP • Biblioteca para Java que suporta CSP • Programação concorrente elegante • Possível usar memória compartilhada/passagem de mensagens • Todos os recursos de Java • Talvez requeira refinamento Ou UML-RT…
Projeto 2 • A partir do modelo em CSP, implementar em JCSP • Adicionar à implementação requisitos não-funcionais • Portanto, o projeto deve ser desafiador e não meramente teórico • Pode usar dos conceitos usados nos fundamentos • Resultado: documentação de descrição e programa
Desenvolvendo o Sistema … Análise Projeto Projeto Implementação (JCSP) (JCSP) (CSP) (CSP) (CSP) (UML-RT) (Java) (CSP.Net) (CSP.Net) Análise automática de propriedades {deadlock, livelock, determinismo} Projeto baseado em Refinamento
Avaliação • Projeto CSP (A) • Projeto JCSP (B) • Prova (C) • Nota = ((A+B)/2+C)/2 Presença requisitada Definir projeto até 20/08/09
Referências • Andrews, G.R. Multithreaded, Parallel, and Distributed Programming. Addison-Wesley, 2000. • Roscoe, A.W. The Theory and Practice of Concurrency. Prentice-Hall, 1998. • Hoare, C.A.R. Communicating Sequential Processes. Prentice-Hall, 1985. • Welch, P. Communicating Sequential Processes for Java. 2003. • CSP.Net • QuickStone. JCSP Network Edition. 2004. • QuickStone. xCSP Technology. 2004.