Mapeamento de CSP para JCSP Patrícia Muniz (pmf) Rafael Duarte (rmd)

Slides:



Advertisements
Apresentações semelhantes
ADT – Arvore Binária de Pesquisa
Advertisements

Projeto de Sistemas de Software Luana Lachtermacher
Java: Comandos Básicos
While While Condição // comandos End While. Exemplos While Var contador As Integer contador = 0 While (contador < 10) contador += 1 console.ConsoleWrite(contador)
Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar.
Listas Encadeadas Circulares Listas Duplamente Encadeadas
2008 LCG/UFRJ. All rights reserved. 1 Standard Template Library STL Claudio Esperança Paulo Roma Cavalcanti.
1 Estruturas de Controle Márcia J. N. Rodrigues Lucena Especialização em Técnicas e Ferramentas de Apoio à Decisão Departamento.
Capítulo 4 Controle de fluxo. 2Capítulo 4 – Controle de fluxo Controle de fluxo if / else switch / case while do / while for break / continue Instruções.
Capítulo 10 Arrays. 2Capítulo 10 – Arrays Arrays Introdução Tipo do array Tamanho do array Preenchendo o array Varrendo um array Array com 2 dimensões.
Prof. Celso Gramática.
Grupo Paralelismo – Unesp RC
FORTRAN 90 Denise Yumi Takamura.
INTRODUÇÃO À COMPUTAÇÃO PARALELA
Subconsultas em SQL. Subconsulta Estrutura geral SELECT.... FROM.... WHERE [at] OPERADOR ( SELECT... FROM... [WHERE... ]) Declaração SELECT localizada.
Vetores (2) Continuação.
Críticas sobre Extreme Programming Francisco Hillesheim.
Prof. Dr. Helder Anibal Hermini
Prof. Dr. Helder Anibal Hermini
1. Equivalência entre portas 2. Derivação de expressões booleanas 3
Teste Estrutural de Software
Gustavo Vieira Pereira
Slide 1 Rede Nacional de Ensino e Pesquisa Treinamento em Gradep - junho 2005 Serviço OXManager Treinamento no GRADEp Serviço OXManager OXManagerDemo.
Slide 1 Rede Nacional de Ensino e Pesquisa Treinamento em Gradep - junho 2005 Serviço ContextManager Treinamento no GRADEp Framework Master-Worker.
Slide 1 Rede Nacional de Ensino e Pesquisa Treinamento em Gradep - junho 2005 Serviço Collector Treinamento no GRADEp Serviço Collector CollectorDemo e.
Profa. Graziela Santos de Araújo Algoritmos e Programação II, 2010
Geração de Código Otimizações independentes de máquina.
Geração de Código Cap. 8. Introdução Fase final para um compilador Entrada é uma representação intermediária do código fonte e a saída é um programa para.
Banco de Dados I Profa. Jiani Cardoso 2/2005
O Fluxo de Testes © Alexandre Vasconcelos
Funções de um computador
Sistemas de Tutoria Inteligente (STI) Visam proporcionar instrução de forma adaptada a cada aprendiz. STIs adaptam o processo de instrução a determinadas.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo III Comandos de Controle.
CES-41 COMPILADORES Aulas Práticas
Capítulo V Análise Sintática
TA 733 A – Operações Unitárias II
Estatística Dados valores (amostras) de variáveis aleatórias X 1, X 2,..., X n, cuja distribuição conjunta é desconhecida, inferir propriedades desta distribuição.
Curso Técnico em Informática La Salle - Canoas
Implementação Do JXTA Como Protocolo De Transporte Do JacORB
Sistemas Lineares Parte 2
Organização de Sistemas de Computadores
Arquitetura de ComputadoresProf a Luiza Mourelle Apesar da evolução tecnológica, as CPUs continuam mais rápidas que a memória. O problema não é tecnológico,
Desempenho A rápida taxa de melhoria na tecnologia de computadores veio em decorrência de dois fatores: avanços na tecnologia utilizada na construção.
Listas Encadeadas.
Tecnologia para Web JavaScript Enrique Pimentel Leite de Oliveira
Marco Antonio Montebello Júnior
Entendendo as definições de classe
Curso de Programação em C++ Universidade Federal do Ceará Departamento de Engenharia Estrutural e Construção Civil Prof: Evandro Parente Junior Monitor:
LINGUAGENS DE PROGRAMAÇÃO
04:27 Introdução Tipos de Fluxo de Dados e de Arquivos Manipulação de Arquivos em Java Classes FileReader e FileWriter Classes FileInputStream e FileOutputStream.
Programação Concorrente com Thread Java
Robótica: Sistemas Sensorial e Motor
Introdução Ciência da Computação estudo de algoritmos –ÊNFASE ao estudo de DADOS armazenamento manipulação refinamento (a partir de dados cru) estrutura.
INPE / CAP-334 Celso L. Mendes Aula 4-D(1) Reestruturação de Programas em Sistemas Vetoriais (II) Tópicos: Suporte à Paralelização Vetorização.
Linguagens de Programação
Professor: Hyggo Almeida
Sincronização com Locks. Locks É um mecanismo de sincronização de processos/threads em que estas devem ser programadas de modo que seus efeitos sobre.
Anália Lima (alc5) Bruno Gentilini (bgda) Eduardo Souza (efs) Ivan França (ilfn) Infra-Estrutura de comunicação Aula Prática Programação de Sockets TCP.
Infra-Estrutura de Comunicação (IF678) Aula Prática 02 – CIn/UFPE Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando.
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 30 (1) Empacotamento de Dados em MPI Tópicos: Buffer de Mensagem Empacotamento/Desempacotamento.
Java em Redes de Computadores
Scala Bruno Barros e Rebeka Gomes
Introdução a JCSP Augusto Sampaio (acas) Patrícia Muniz (pmf) Rafael Duarte (rmd)
Java Generics Adeline de Sousa Silva.
ArrayList e Genéricos Profs. PROG2 - UNISINOS.
Tipos Especiais de Listas
Alisson Rafael Appio SOP aplicado em um jogo tipo de corrida usando a arquitetura cliente e servidor Alisson Rafael Appio
Mapeamento de CSP para JCSP Patrícia Muniz (pmf) Rafael Duarte (rmd)
Mobilidade para Linguagem Orientada a Objetos 1
Augusto Sampaio (acas) Patrícia Muniz (pmf) Rafael Duarte (rmd)
Transcrição da apresentação:

Mapeamento de CSP para JCSP Patrícia Muniz (pmf) Rafael Duarte (rmd)

Revisão JCSP Um processo é um objeto de uma classe que implementa: O comportamento do processo é determinado pelo corpo do método run() interface CSProcess { public void run(); } interface CSProcess { public void run(); }

Revisão JCSP Um canal é um objeto de uma classe que implementa: interface Channel { } interface Channel { }

Revisão JCSP Já vimos interfaces e classes JCSP que implementam: –Processos –Canais –Paralelismo –Composição sequencial Falta apresentar escolha (Alternative)

Alternative –Implementa (external) choice –Exemplo: AltingChannelInput ch1, ch2 =... Guard[] guards = new Guard[] {ch1, ch2}; boolean[] preconditions = new boolean[] {g1, g2}; Alternative alt = new Alternative(guards); int indexGuard = alt.select(preconditions); AltingChannelInput ch1, ch2 =... Guard[] guards = new Guard[] {ch1, ch2}; boolean[] preconditions = new boolean[] {g1, g2}; Alternative alt = new Alternative(guards); int indexGuard = alt.select(preconditions); algoritmo de seleção

Canais em JCSP

Alternative Uma guarda pode ser apenas um evento de entrada, ou um timeout, ou o processo Skip Sempre ativo Torna-se ativo quando o timeout dispara Torna-se ativo quando chega um sinal Torna-se ativo quando uma chamada de método pode ser executada

Alternative Canais One2Any e Any2Any não podem ser usados como guardas, porque podem gerar inconsistências One2AnyChannel a; a.out().write(...); One2AnyChannel a; a.out().write(...); One2AnyChannel a; alt = new Alternative(a.in()); switch (alt.select()) case 0: a.in().read(); One2AnyChannel a; alt = new Alternative(a.in()); switch (alt.select()) case 0: a.in().read(); One2AnyChannel a; a.in().read(); One2AnyChannel a; a.in().read(); a O evento a foi selecionado porque está ativo, embora tenha sido direcionado para outro processo Não compila! SharedChannelInput não é do tipo Guard

Mapeamento de canais One2OneChannel a = P(a.out()) [|a|] Q(a.in()) One2AnyChannel a = P(a.out()) [|a|] (Q1(a.in()) ||| Q2(a.in())) Any2OneChannel a = (P1(a.out()) ||| P2(a.out())) [|a|] Q(a.in()) Any2AnyChannel a = (P1(a.out()) ||| P2(a.out())) [|a|] (Q1(a.in()) ||| Q2(a.in())) Na prática a comunicação é sempre ponto-a-ponto, porque apenas 2 processos se comunicam por vez

Mapeamento de processos O que temos em CSP? 1.P = pre & a -> P 2.P = a?x:{restricao} -> P 3.P = a!x?y -> P 4.P = (a -> P) [] (b -> P) 5.P = (a -> P) |~| (b -> P) 6.P = a -> Q 7.P = (a -> Q) [] (b -> R) 8.P = Q ||| R 9.P = Q || R 10.P = Q |a| R CUIDADO JCSP não possui mecanismos naturais para algumas destas construções!

Mapeamento de processos 1. P = pre & a -> P P implements CSProcess { AltingChannelInput a; public void run() { boolean pre =... Guard[] guards = new Guard[]{a}; bollean[] preconditions = new boolean[] {pre}; Alternative alt = new Alternative(guards); while (true) { switch (alt.select(preconditions)) case 0: a.read(); break; } P implements CSProcess { AltingChannelInput a; public void run() { boolean pre =... Guard[] guards = new Guard[]{a}; bollean[] preconditions = new boolean[] {pre}; Alternative alt = new Alternative(guards); while (true) { switch (alt.select(preconditions)) case 0: a.read(); break; }

Mapeamento de processos 2. P = a?x:{restricao} -> P A restrição de um valor de entrada pode ser verificada apenas após a leitura do dado. Mas neste ponto já houve sincronização!! Se o canal for de saída (ChannelOutput), a restrição pode ser implementada if (f_restricao(x)) { a.write(x); }

Mapeamento de processos 3. P = a!x?y -> P Há várias formas de implementar canais com múltiplos dados Atenção para troca mútua de dados: P(e) = a?x!e -> P(e) Q(e) = a!x?e -> Q(e)

Mapeamento de processos 3.1 P = a!x?y -> P P = a!x?y ->...// um canal para cada dado Q = a?x!y ->... P {ChannelOutput ax; AltingChannelInput ay;... ax.write(valueX); DataY valueY = (DataY)ay.read();... } Q {AltingChannelInput ax; ChannelOutput ay;... DataX valueX = (DataX)ax.read(); ay.write(valueY);... } P = a!x?y ->...// um canal para cada dado Q = a?x!y ->... P {ChannelOutput ax; AltingChannelInput ay;... ax.write(valueX); DataY valueY = (DataY)ay.read();... } Q {AltingChannelInput ax; ChannelOutput ay;... DataX valueX = (DataX)ax.read(); ay.write(valueY);... }

Mapeamento de processos 4. P = (a -> P) [] (b -> P) Os canais de entrada são naturalmente usados como Guard Canais de saída não podem ser usados como Guard –opção 1: criar um novo canal de entrada e antecedê-lo ao canal de saída b!out ->....user -> b!out ->... –opção 2: usar um timeout antes da ocorrência do canal de saída

Mapeamento de processos 4. P = (a!x -> P) [] (b?y -> P) P implements CSProcess { AltingChannelInput b, user; OutputChannel a; public void run() { Guard[] guards = new Guard[]{b, user}; Alternative alt = new Alternative(guards); while (true) { switch (alt.select()) case 0:b.read(); break; case 1:user.read(); a.write(..); break; } P implements CSProcess { AltingChannelInput b, user; OutputChannel a; public void run() { Guard[] guards = new Guard[]{b, user}; Alternative alt = new Alternative(guards); while (true) { switch (alt.select()) case 0:b.read(); break; case 1:user.read(); a.write(..); break; }

Mapeamento de processos 5. P = (a -> P) |~| (b -> P) Noção pouco clara O não-determinismo pode ser implementado através do método de seleção de Alternative select() – seleciona arbitrariamente na lista de guardas ativas priSelect() – seleciona o primeiro da lista de guardas ativas fairSelect() – seleciona a guarda ativa menos visitada

Mapeamento de processos 6. P = a -> Q P = a -> Skip; Q P implements CSProcess { ChannelInput a; public void run() { a.read(); new Q().run(); } P implements CSProcess { ChannelInput a; public void run() { a.read(); new Q().run(); } new Sequence( new CSProcess[] { new PSkip(..), new Q(...) } ) new Sequence( new CSProcess[] { new PSkip(..), new Q(...) } )

Mapeamento de processos 6. P = a -> Q Atenção para a passagem de parâmetros P(x) =... -> Q(f(x)) onde definir f(x)? P implements CSProcess { Object x; public void run() {... new Q( f(x) ).run(); } P implements CSProcess { Object x; public void run() {... new Q( f(x) ).run(); }

Mapeamento de processos 7. P = (a -> Q) [] (b -> R) P implements CSProcess { AltingChannelInput a, b; public void run() { Guard[] guards = new Guard[]{a, b}; Alternative alt = new Alternative(guards); switch (alt.select()) case 0:a.read(); new Q().run(); break; case 1:b.read(); new R().run(); break; } P implements CSProcess { AltingChannelInput a, b; public void run() { Guard[] guards = new Guard[]{a, b}; Alternative alt = new Alternative(guards); switch (alt.select()) case 0:a.read(); new Q().run(); break; case 1:b.read(); new R().run(); break; }

Mapeamento de processos 8. P = Q ||| R Canais Any2One, One2Any e Any2Any class Q implements CSProcess { ChannelInput a; ChannelOutput b; a.in().read();... b.out().write(...); } class Q implements CSProcess { ChannelInput a; ChannelOutput b; a.in().read();... b.out().write(...); } class Exemplo { Any2OneChannel a = Channel.any2one(); One2AnyChannel b = Channel.one2any(); public void run(){ new Parallel (new CSProcess[] { new Q(a.out(),b.in()), //b.in()!=b.in() // a.out() SharedChannelOutoput new Q(a.out(),b.in()), //b.in() SharredChannelInput new CSProcess () { public void run () { a.out().write(1); b.in().read();} } }).run ();} class Exemplo { Any2OneChannel a = Channel.any2one(); One2AnyChannel b = Channel.one2any(); public void run(){ new Parallel (new CSProcess[] { new Q(a.out(),b.in()), //b.in()!=b.in() // a.out() SharedChannelOutoput new Q(a.out(),b.in()), //b.in() SharredChannelInput new CSProcess () { public void run () { a.out().write(1); b.in().read();} } }).run ();}

Mapeamento de processos 9. P = Q || R e 10. P = Q |a| R Canais One2One devem ser usados para garantir a sincronização ponto-a-ponto Os demais tipos de canais (One2Any, Any2One, Any2Any) não garantem comunicação síncrona entre todos os participantes. A sincronização é alcançada pelo uso da referência ao mesmo canal em Q e R

Mapeamento de processos 9. P = Q || R e 10. P = Q |a| R Para cada 2 processos em paralelo é usado 1 canal One2One para cada evento de sincronização // Q |a| R One2OneChannel a = Channel.one2one(); public void run(){ new Parallel (new CSProcess[] { new Q(a.in()), new R(a.out()) }).run (); } // Q |a| R One2OneChannel a = Channel.one2one(); public void run(){ new Parallel (new CSProcess[] { new Q(a.in()), new R(a.out()) }).run (); }

Mapeamento de processos 9. P = Q || R e 10. P = Q |a| R Para 3 ou mais processos em paralelo é usado um array de canais One2One para cada evento de sincronização // (Q |a| R) |a| S One2OneChannel[] a = Channel.one2oneArray(3); new Parallel ( new Parallel (new CSProcess[] { new Q_11(a[1].in(),a[2].out()), new R_11(a[2].in(),a[0].out()), new S_11(a[0].in(),a[1].out()) } ).run(); // (Q |a| R) |a| S One2OneChannel[] a = Channel.one2oneArray(3); new Parallel ( new Parallel (new CSProcess[] { new Q_11(a[1].in(),a[2].out()), new R_11(a[2].in(),a[0].out()), new S_11(a[0].in(),a[1].out()) } ).run();

Outras construções de JCSP Barriers –Enquanto um Channel pode sincronizar apenas 2 processos por vez (reader e writer), Barriers podem sincronizar qualquer número definido de processos –Executam eventos que não transmitem qualquer informação, mas que bloqueiam processos até que todos possam sincronizar –Não podem ser guardas de um Alternative barrier PPP

Exemplo final Barrier barrier = new Barrier (nPlayers); for (int i = 0; i < players.length; i++) { players[i] = new Player (i, nPlayers, barrier);}.... public void run(){ System.out.println ("Player " + id + " at the barrier..."); barrier.sync (); System.out.println ("\t\t\t... Player " + id + " over the barrier"); } final Barrier barrier = new Barrier (nPlayers); for (int i = 0; i < players.length; i++) { players[i] = new Player (i, nPlayers, barrier);}.... public void run(){ System.out.println ("Player " + id + " at the barrier..."); barrier.sync (); System.out.println ("\t\t\t... Player " + id + " over the barrier"); }

Outras construções de JCSP Buckets –Executam eventos que não transmitem qualquer informação, mas que bloqueiam processos até que seu método flush() seja executado –São não-determinísticos, desde que a decisão para executar o flush() é uma escolha interna do processo responsável bucket PPP Flusher flush()

Exercício Implementar em JCSP os seguintes processos: VM(c,t) = c > 0 & coffee -> VM(c-1,t) [] t > 0 & tea -> VM(c,t-1) CLIENT = coffee -> CLIENT |~| tea -> CLIENT SYSTEM = VM(10,10) [|{|coffee, tea|}|] CLIENT

Exemplos: Lembrete: Documentação mais atual: rc7/jcsp-docs/