Alexandre Mota [email protected] Breve introdução à CSO (Communicating Scala Objects)

Click here to load reader

  • date post

    07-Apr-2016
  • Category

    Documents

  • view

    215
  • download

    0

Embed Size (px)

Transcript of Alexandre Mota [email protected] Breve introdução à CSO (Communicating Scala Objects)

Modelagem e Anlise de Sistemas de Controle Atravs de Linguagens Formais

Alexandre [email protected] introduo CSO (Communicating Scala Objects)1CSO uma biblioteca na linguagem de programao ScalaNotao conveniente da essncia de OCCAMOCCAM uma linguagem de programao concorrente que tem por base a comunicao de processos sequenciais (CSP) processo de lgebraBaseada em JCSP, mas de fato uma extensoPerformance prxima ou melhor a de JCSP e da biblioteca de atores de ScalaPrincipais elementos de CSOProcessosSimplesEm paraleloColeo de processos paralelos

Portas e canaisDeclaraes e tiposCanais sncronos e assncronos

Escolha (alternation)ProcessosQuando um processo inicializado, todos os threads livres necessrios para sua execuo so adquiridos no pool de threads de ScalaAo terminar, os threads so devolvidos ao poolComo Scala usa um modelo de concorrncia que evita efeitos colaterais (um objeto alterar o estado de outro), colees so paralelizadas tanto quanto possvelApesar de poder ser alterado, a quantidade de threads do pool assume quantidade padro em funo do nmero de cores da mquina

ProcessosProcessos (p: PROC) so valoresPodem assumir as seguintes formas:proc { expr }Processo simples (expr deve ser comando, tipo Unit)

p1 || p2 || || pkComposio paralela de k processos (cada pi deve ter tipo PROC)

|| coleoComposio paralela de coleo finita de valores PROCColeo de processosUm padro recorrente de uma coleo paralela de processos assume a seguinte forma:

|| (for (i U) : UMtodo rendezvous estendidoExplicado e exemplificado posteriormentePortas e canais (Mais frequentes)Canais sncronosOneOne[T]Apenas um processo pode fazer ? ou !ManyOne[T]Apenas um processo pode fazer ?. Mais de um processo pode fazer !, mas no-deterministicamenteOneMany[T]Inverso do anteriorManyMany[T]Combinao dos dois anteriores. No-determinismo para ? e !Buf[T](n) buffer de capacidade nExemplo 1

Canais simplesInstanciando vetor de canaisColees de processosComposio paralelaExecuo dos processosRendezvous estendidoComo dito antes, uma escrita (!) termina sincronamente com a terminao da leitura (?)Uma leitura usando rendezvous estendidoPermite que a computao sobre os dados transferidos seja feita no processo leitorE apenas quando esta computao termina que a leitura considerada terminada e o processo escritor liberado da sincronizaoA forma usual in ? { bv => body }Recebe v atravs de in e aplica a funo { bv => body} sobre vExemplo: monitorando trfego entre processosDado o processo

Suponha que se deseja monitor o trfego de dados entre producer e consumerUma primeira aproximao seria

Exemplo: monitorando trfego entre processosDe

Temos o problema de que to logo left ? Seja executado, producer est livre para continuarSoluo seria

Exemplo: monitorando trfego entre processosMas ento

O rendezvous s termina, quando a expresso { mon ! v ; right ! v } terminarH potencial para deadlock, devido ordem

Para relaxar, pode-se usar

Exemplo: monitorando trfego entre processosPode-se generalizar a soluo anterior definido o seguinte componente

Outro exemplo interessante

Um evento transformado em canal (Unit)Escolha (alternation)A forma mais simples de escolha consiste em uma coleo de eventos guardados

Um evento da forma (g &&& p) =?=> { bv => cmd } dito habilitado se p est aberta e g for true dito pronto se p estiver pronta para leitura disparado pela leitura de p, associando o valor lido a bv e executando cmd

Escolha (alternation)A execuo de uma alt procede, em princpio, em fases seguintes:Todas as guardas dos eventos so avaliadas e, em seguidaO thread atual aguarda at que (pelo menos um) caso habilitado esteja pronto e, entoUm dos eventos prontos escolhido e disparadoSe no houver eventos habilitados aps a fase 1, ou se todos os canais associados com as portas fecharem enquanto espera na fase 2, ento a exceo Abort (que tambm uma forma de exceo Stop) levantadaEscolha (alternation)Um construtor especial sobre escolhas o serve

Se evs uma coleo de eventos guardados, ento, serve (evs) executa as fases anteriores repetidamente (at que uma exceo Stop seja lanada)

Mas as escolhas feitas na fase 3 so feitas em esquema de rodzio (para evitar repetio)Exemplo com escolha

Escolha guardada usando canais de sadaEm 2008, a forma(guard&&&port) =!=> {expression} ==> {bv => cmd}Foi adicionada CSOSeu funcionamento :Quando a porta estiver pronta para comunicar, ento a forma completa estar pronta (estado) disparada avaliando a expresso e escrevendo o valor resultante (bv) na portaO valor resultante tambm pode ser usado em cmdEscolha guardada usando canais de sadaO valor bv pode ser omitido se no for usado em cmd(guard&&&port) =!=> { expression } ==> { cmd }E a ltima forma possvel (guard&&&port) =!=> { expression } ==> { cmd }Caso cmd no necessite ser usadoExemplo

Refernciashttps://www.cs.ox.ac.uk/people/bernard.sufrin/personal/CSO/cpa2008-cso-2014revision.pdfhttps://www.cs.ox.ac.uk/people/bernard.sufrin/personal/CSO/cso-doc-scala2.11.4/#packageAlexandre [email protected] introduo CSO (Communicating Scala Objects)26Exemplo 2

Exemplo 2