Mapeamento de CSP
em UML-RT
Características de UML-RT
• Cápsulas
– Classes ativas e independentes
– Comunicam-se entre si através de mensagens (sinais)
– Máquinas de estado modelam o comportamento da cápsula para cada ocorrência de sinal
– Podem ser:
• Fixas: criadas automaticamente quando o sistema é iniciado • Opcionais ou Plug-in: criadas e destruídas em runtime
(como processos CSP) q : Q r : R P a.in / createCapsule(r); a State of P
Características de UML-RT
• Cápsulas Fixas x Cápsulas Opcionais
q : Q P a.in / createInstance(r); a.in / removeInstance(r); a r : R
• Cápsulas opcionais ativas comportam-se exatamente como cápsulas fixas
Características de UML-RT
• Portas
– Realizam protocolos
– Usadas para enviar ou receber mensagens de dados – Podem ser:
• Wired: explicitamente conectadas a outras portas, através de conectores
• Unwired: conectadas dinamicamente, em runtime
• Protocolos
– Definem as regras de comunicação entre portas de um mesmo tipo – Definem o tipo das mensagens que podem ser transmitidas ou
aceitas pelas portas das cápsulas
Características de UML-RT
• Mensagens – Podem ser: • Assíncronas • Síncronas port.signal(data).send(); port.signal(data).send(Priority.High); port.signalIn(data).invoke(); port.signalOut(data).reply();Mapeamento de CSP em UML-RT
• Deve considerar:
– tipos de dados como classes básicas de negócio – processos como cápsulas
– canais como portas de comunicação – Parâmetros como atributos de cápsulas – funções e expressões lógicas como
Mapeamento de CSP em UML-RT
datatype X : x1 | x2 P(s) = a?x → P(f(x)) f(x) = x + 1 Datatype X $ x1 : X $ x2 : XMapeamento de Tipos de Dados
T $ v0 : T $ v1 : Tdatatype T = v0 | .. | vn
T x : T1 y : T2 getX() : T1 getY() : T2datatype T = T1.T2
Mapeamento de Processos
• Processos são representados como cápsulas
• As transições da máquina de estados refletem os eventos do processo • Comunicação entre cápsulas deve atender o modelo de comunicação
de CSP
a1 a2
P
P = a1?x → a2!x → Stop
SP
S1
S2
a1.in?x / a2.out!x;
Mapeamento do
Modelo de Comunicação de CSP
• CSP possui
– Modelo de comunicação síncrono
• Sincronização simples (2 processos em paralelo)
• Multi-sincronização (3 ou mais processos em paralelo)
– Causalidade entre eventos
• UML-RT possui
– Comunicação síncrona e assíncrona
– Semântica run-to-completion (um evento só ocorre após a
Mapeamento do
Modelo de Comunicação de CSP
• Mensagens síncronas de UML-RT são suficientes para implementar
sincronismo simples
Q
a.request(1) true P = a!{1,2,3} → STOP Q = a?{1,2} → STOP P |{a}| QP
Mapeamento do
Modelo de Comunicação de CSP
• Mensagens síncronas de UML-RT não são suficientes para
implementar multi-sincronismo de CSP
Q
R
a.request(1) a.request(1) true P = a!{1,2,3} → STOP Q = a?{1,2} → STOP R = a?{2,3} → STOP P |{a}| Q |{a}| RP
Mapeamento do
Modelo de Comunicação de CSP
• Mensagens síncronas de UML-RT não são suficientes para
implementar multi-sincronismo de CSP
Q
a.request(1) a.request(1) true a.rollbackP
P = a!{1,2,3} → STOP Q = a?{1,2} → STOP R = a?{2,3} → STOP P |{a}| Q |{a}| RR
A semântica do operador de paralelismo foiMapeamento do
Modelo de Comunicação de CSP
• Mensagens síncronas de UML-RT não são suficientes para
implementar multi-sincronismo de CSP
Q
R
a.request(2) a.request(2) true true a.commit a.commitA semântica do operador de paralelismo foi
P
P = a!{1,2,3} → STOP Q = a?{1,2} → STOP R = a?{2,3} → STOP P |{a}| Q |{a}| R
Mapeamento do
Modelo de Comunicação de CSP
• Por se tratar de uma regra de comunicação entre portas, podemos
representar a causalidade entre eventos através de protocolos de comunicação
Mapeamento do
Modelo de Comunicação de CSP
Q = a?x:{1,2} -> STOP
Q
Mapeamento de Processos
• Operadores de CSP podem ser representados por cápsulas de controle, que contém outras cápsulas
• Ex: construa um modelo UML-RT a partir do código CSP abaixo
channel a
P = a?m:{1,2} -> P Q = a?m:{2,3} -> Q
Mapeamento de Processos
SParallel locked S0 a.request?m /; / a.agreement!reply(); Sc F T a.commit / aP.commit!invoke(); aQ.commit!invoke(); a.rollback/ aP.rollback!invoke(); aQ.rollback!invoke(); boolean r = False; rP = ap.request(m).invoke(); rQ = aq.request(m).invoke();if (rp == true and rq == true) { r = True; } else { if (rp == true) aP.rollback; if (rq == true) aQ.rollback; r = False; } Parallel aP : CSPMessageProtocol p : P q : Q a : CSPMessageProtocol aQ : CSPMessageProtocol
Mapeamento de Processos
– Em CSP, processos podem comportar-se como outros processos
• P = Q
• P = a -> (R[]W) • P = a -> P\{a}
– Em UML-RT isto implicaria em cápsulas reaproveitarem ou serem substituídas por outras cápsulas
– UML-RT não admite recursão mútua entre cápsulas
P = a -> Q Q = b -> P
Mapeamento de Processos
• A recursão mútua é resolvida por uma cápsula controladora, que
contém as demais
• As cápsulas de processo:
– São sub-cápsulas opcionais de cápsula controladora – Contém uma porta específica para informar novos
Mapeamento de Processos
• Cápsula controladora deve:
– Receber as mensagens de dados enviadas pelo ambiente externo e repassá-las para as sub-cápsulas ativas.
– Receber as mensagens de novos comportamentos enviadas pelas sub-cápsulas ativas, e mudar sua configuração interna.
• Cápsula controladora interpreta o comportamento associado aos
operadores de CSP – P [|{|a|}|] Q
– P;Q – STOP
Mapeamento da
Semântica Comportamental
P = a?x:{1,2} → R Q = a?x:{2,3} → W R = a?x → P W = c?x → Q SystemController = P [|{|a|}|] Q SystemController aP : CSPMessageProtocol a : CSPMessageProtocol p : P a : CSPMessageProtocol bP : CSPBehaviorProtocol b : CSPBehaviorProtocol q : Q bQ : CSPBehaviorProtocol b : CSPBehaviorProtocol aQ : CSPMessageProtocol a : CSPMessageProtocol c : CSPMessageProtocol aR: CSPMessageProtocol a : CSPMessageProtocol r : R bR : CSPBehaviorProtocol b : CSPBehaviorProtocol w : WMapeamento da
Semântica Comportamental
SSystemController Sc bP.term?N / removeCapsule(q); createCapsule(N); bQ.term?N / removeCapsule(p); createCapsule(N); a.request?x /if (pRef.status = active) aP.request(x).invoke(); if (qRef.status = active) aQ.request(x).invoke();
if (rRef.status = active) aR.request(x).invoke();
SystemController aP : CSPMessageProtocol a : CSPMessageProtocol p : P a : CSPMessageProtocol bP : CSPBehaviorProtocol b : CSPBehaviorProtocol q : Q bQ : b : aQ : CSPMessageProtocol a : CSPMessageProtocol c : CSPMessageProtocol
Mapeamento da
Semântica Comportamental
SSystemController Sc bW.term?N / removeCapsule(w); createCapsule(N); bR.term?N / removeCapsule(r); createCapsule(N); c.request?x /if (wRef.status = active) cW.request(x).invoke();
SystemController cR: CSPMessageProtocol a : CSPMessageProtocol r : R a : CSPMessageProtocol bR : CSPBehaviorProtocol b : CSPBehaviorProtocol w : W b : cW : CSPMessageProtocol a : CSPMessageProtocol c : CSPMessageProtocol
Mapeamento de CSP em UML-RT
• Ferramenta para Geração automática de Modelos UML-RT – Cria modelos UML-RT no Rose RealTime
– Expressões lógicas e funções não são traduzidas. É necessário codificá-las