2. Kalp Kavramının Müteradifleri
2.3. Bilgi
2.3.1. Kalp-Bilgi İlişkisi
Um urbanista está realizando uma pesquisa na área de planejamento urbano e está preocupado com a falta de planejamento com que plantas urbanas de certas cidades são feitas. Um dos tópicos de sua pesquisa inclui a simulação de um fluxo de carros em vários cruzamentos de um bairro. O urbanista quer um programa que simule um fluxo de vários carros em um bairro ao mesmo tempo. Ele disse que o bairro deve possuir 9 cruzamentos e 4 carros. Cada carro passará por alguns cruzamentos. Os carros devem se mover da seguinte forma:
• O carro Carro1 dá uma volta passando respectivamente pelos cruzamentos c1, c2, c3, c6, c5 e c4;
• O carro Carro2 dá uma volta passando respectivamente pelos cruzamentos c4, c5, c6, c9, c8 e c7;
• O carro Carro3 dá uma volta passando respectivamente pelos cruzamentos c2, c5, c8, c7, c4 e c1;
• O carro Carro4 dá uma volta passando respectivamente pelos cruzamentos c3, c6, c9, c8, c5 e c2;
A figura 5.9 ilustra este exemplo. A especificação será composta pelos seguintes elemen- tos:
• Os cruzamentos serão canais de sincronização (ou seja, canais que não comunicam valor), e serão representados pelos seguintes nomes: c1, c2, c3, c4, c5, c6, c7, c8 e c9;
• Cada carro será uma ação do processo do sistema;
• O sistema inteiro será representado por um processo cuja ação principal é um para- lelismo entre as ações que representam os carros;
• Como não poderemos ter dois carros ao mesmo tempo em cada cruzamento, os canais em comum de cada carro, na expressão de paralelismo, não devem sin- cronizar. Assim, temos uma intercalação que deve ser forçada;
A seguir é exibido o processo que representa o exemplo desta subseção. channel c1, c2, c3, c4, c5, c6, c7, c8, c9
process CRUZAMENTOS= beginb
CARRO1 b= c1 → c2 → c3 → c6 → c5 → c4 → SKIP
Figura 5.9: Figura representando este exemplo.
CARRO3 b= c2 → c5 → c8 → c7 → c4 → c1 → SKIP
CARRO4 b= c3 → c6 → c9 → c8 → c5 → c2 → SKIP
• CARRO1 ||[ {} | {} ]|| CARRO2 ||[ {} | {} ]|| CARRO3 ||[ {} | {} ]|| CARRO4 end
Na especificação CRU ZAMEN TOS , o operador ||| determina uma intercalação entre os seus operandos. Isto significa que os eventos (cruzamentos) que cada carro (ação) tiver em comum não devem sincronizar entre si. Isto é, cada evento deve ocorrer separada- mente (intercaladamente).
Podemos observar que o processo CRU ZAMEN TOS não é diretamente aplicável ao método de paralelismo desenvolvido para esta dissertação. Isto ocorre porque a sua ação principal possui ações de chamada (call actions) a CARRO1, CARRO2, CARRO3 e
CARRO4. Estas chamadas devem ser expandidas, mas esta não é a única mudança que
CRUZAMENTOS deve sofrer. As seguintes modificações deverão ser feitas porJCircus:
• Substituição de cada prefixação de cada ação por ações seqüênciais, a fim de diminuir o tamanho das versões renomeadas da AST da especificação (caso especial 1 da seção do paralelismo com renomeação);
• Expansão do conteúdo de cada ação de chamada presente na ação principal do processo CRUZAMENTOS;
Quando são feitas estas mudanças, a Árvore Sintática Abstrata do processo CRU ZA-
MEN TOS é alterada,JCircus pre-processa a especificação, e traduz. O código gerado,
bem como a AST da especificação, não serão exibidos aqui devido às suas extensões. Quando a GUI de CRU ZAMEN TOS é executada, é exibida a tela da figura 5.10. Esta tela exibe 9 botões: c1, c2, c3, c4, c5, c6, c7, c8, c9. Cada um destes botões repre- senta um cruzamento do sistema. Antes de efetuar cliques e verificar os resultados, é
Figura 5.10: GUI da execução do processo CRUZAMENTOS
importante refletir sobre qual é o papel da GUI neste exemplo: se a GUI interage com o processo CRU ZAMEN TOS , os canais de CRU ZAMEN TOS dependem da GUI para sincronização. É possível simular o movimento dos carros de cruzamento em cruza- mento. Assim, podemos considerar a GUI como um "bloqueador"dos cruzamentos, em que os cliques nos seus botões desbloqueiam os cruzamentos. Por exemplo, inicialmente, todos os cruzamentos estão bloqueados. Se clicarmos, por exemplo, no botão do canal c1, o cruzamento c1 é desbloqueado, e o seguinte resultado é exibido na área de texto da GUI:
timerSync: GUI and Process Synchronized
timerSync: GUI and Process did NOT synchronize. Try another one
O resultado exibido mostra que a GUI realizou duas tentativas de sincronização em c1, e apenas uma foi bem sucedida. Isto ocorre porque c1, na AST transformada de CRU -
ZAMEN TOS, possui duas versões renomeadas, c10 e c11. O canal c10 é a versão
renomeada do canal c1 na ação CARRO1, e c11 é a versão renomeada de c1 na ação
CARRO3. Como só CARRO1 desejava realizar o evento do canal c1, então ele foi o
que sincronizou. Isto pode ser interpretado da seguinte forma: Assim que o cruzamento c1 foi desbloqueado, apenas um carro tentou e conseguiu atravessá-lo. Como só o carro
1 tenta inicialmente atravessá-lo, sabemos que foi este o carro que atravessou c1.
Vamos agora efetuar o clique em outro botão da GUI, o c9. Ao atravessar o cruzamento c1, CARRO1 agora espera para conseguir atravessar c2. Nenhum dos outros três carros estão tentando atravessar o cruzamento c9. Portanto, quando a GUI tentar sincronizar com as duas versões renomeadas de c9, c90 e c91, não conseguirá, e o resultado exibido é o seguinte:
timerSync : GUI and Process did NOT synchronize. Try another one
timerSync : GUI and Process did NOT synchronize. Try another one
Este exemplo exercitou a situação de intercalação (interleaving) entre ocorrências de um
mesmo canal, que pode ocorrer em composições Circusparalelas. A especificação deste
exemplo não é traduzível pela versão original deJCircus, porque a estratégia de tradução
original só possui a tradução do paralelismo de Hoare, em que os ramos do paralelismo sincronizam obrigatoriamente nos eventos que estes ramos tem em comum. Para que a
especificação deste exemplo fosse traduzível pela versão original deJCircus, ela teria que
ser alterada para a especificação CRUZAMENTOS′, definida a seguir.
process CRUZAMENTOS’= beginb
CARRO1 b= c1 → c2 → c3 → c6 → c5 → c4 → SKIP CARRO2 b= c4 → c5 → c6 → c9 → c8 → c7 → SKIP CARRO3 b= c2 → c5 → c8 → c7 → c4 → c1 → SKIP CARRO4 b= c3 → c6 → c9 → c8 → c5 → c2 → SKIP • CARRO1 |[ {| c4, c5, c6 |} ]| CARRO2 |[ {| c4, c5, c7, c8 |} ]| CARRO3 |[ {| c2, c5, c8 |} ]| CARRO4 end
A especificação CRUZAMENTOS′só é traduzível pela versão original deJCircusporque
os conjuntos de sincronização de cada ramo do paralelismo são formados apenas pelos eventos que eles tem em comum. Por exemplo, CARRO1 e CARRO2 só tem c4, c5 e c6 em comum. CARRO2 e CARRO3 só tem c4, c5, c7 e c8 em comum. Por fim,
CARRO3 e CARRO4 só tem c2, c5 e c8 em comum. Com as extensões realizadas para
esta dissertação, tanto CRUZAMENTOS como CRUZAMENTOS′são traduzíveis.