DEL 3 • ARBEID, VELFERD OG MILJØ
10.6 Fagbevegelsens organisering i Europa
A comunicação directa refere-se ao estabelecimento de uma comunicação explícita en- tre duas entidades, em que a entidade emissora envia explicitamente para um dado destinatário, uma mensagem, através da invocação da primitiva send(). O destinatá- rio, por sua vez, recebe e processa a mensagem que lhe foi enviada de acordo com o método invocado por esta, que é explicitado na mensagem. As entidades têm dispo- níveis dois mecanismos distintos para o estabelecimento da comunicação directa que são apresentados de seguida.
Método explícito do receptor
Através deste mecanismo, o emissor invoca explicitamente um método da interface do receptor (entidade), responsável pela recepção e tratamento da mensagem.
send(in : entidade_emissora_id,entidade_receptora_id,metodo_recepcao,mensagem)
Nesta situação o destinatário (entidade_receptora), por cada método invocado, de- sencadeia a execução do método de recepção indicado (metodo_recepção) que é o res- ponsável por efectuar o processamento da mensagem enviada pela entidade emissora.
UM MODELO DE COMPUTAÇÃO BASEADO EM GRUPOS
A definição e implementação de cada método é da responsabilidade de quem desen- volve a aplicação, sendo estes associados à entidade quando da sua criação/definição, e fazem parte da sua interface. O conjunto de métodos que a entidade disponibiliza para a interacção é uma das características que definem a interface oferecida por cada entidade e deve ser do conhecimento do elemento emissor.
Este mecanismo permite a comunicação directa entre quaisquer duas entidades do sistema. É uma forma de interacção não bloqueante, não existindo confirmação de recepção por parte da entidade destinatária. Como no caso em que a entidade emis- sora pretende efectuar uma comunicação directa com uma entidade que se encontra OFFLINE, nesta situação a acção de send não fica a aguardar pela recepção.
Fila de mensagens no receptor
Com este mecanismo, é activado no destinatário, um método genérico que trata da recepção da mensagem colocando-a numa estrutura interna ao receptor (fila de men- sagens), que pode ser acedida através da invocação, por parte do receptor, da primitiva de leitura explícita receive. No caso do destinatário ser um grupo a mensagem é colo- cada na fila global do grupo.
A acção de envio directo de uma mensagem é desencadeada na sequência de uma acção de send por parte do emissor.
send(in : entidade_emissora_id,entidade_receptora_id,tipo_noti f icacao,mensagem)
Quando o destinatário é um grupo, a mensagem é processada por este através do representante de grupo. A forma como são "avisados" os membros do grupo depende do tipo de notificação especificado pelo emissor, através do parâmetro tipo_noti f icacao. A divulgação da chegada de mensagem pelos membros de um grupo pode ter diferen- tes comportamentos, de acordo como o tipo indicado na invocação da primitiva send(). São consideradas as seguintes políticas de divulgação:
PASSIVE: neste caso a mensagem é dirigida somente ao representante do grupo, que
a processa e coloca na fila de mensagens global do grupo, não sendo esta infor- mação difundida aos membros do grupo;
NOTIFY: publica um evento de aviso16 de chegada de mensagem ao grupo sendo,
neste caso, da responsabilidade de cada membro desencadear o processo de lei- tura da mensagem;
SPREAD: publica um evento17, que desencadeia um processo de notificação aos mem-
bros do grupo, através do qual a mensagem é difundida pelo grupo.
16Este evento de chegada de mensagem é um dos eventos de sistema (MESSAGE_EV). Este tipo de
eventos é por convenção subscrito por todas as entidades do sistema.
UM MODELO DE COMPUTAÇÃO BASEADO EM GRUPOS
Na situação em que o destinatário é uma entidade elementar, a colocação de uma mensagem na sua fila local de mensagens desencadeia um evento de aviso de chegada de mensagem, não sendo processado, neste caso, o argumento tipo_noti f icacao.
Para efectuar a leitura de mensagens, o receptor tem à sua disposição a primitiva receive(), que permite a qualquer fluxo de execução de membros do grupo, ir "buscar" explicitamente uma mensagem à sua fila local de mensagens ou à fila global do grupo. No caso da leitura da mensagem da sua própria fila de mensagens a primitiva de receive()toma a forma:
receive(in : tipo; out : mensagem)
Esta primitiva desencadeia a remoção de uma mensagem da fila utilizando uma estratégia FIFO.
No caso de leitura efectuada no contexto do grupo a primitiva receive() pode ser in- vocada por qualquer membro do grupo tratando-se de uma leitura não destrutiva, per- manecendo as mensagens na fila global do grupo até expirar um certo timeout. Neste caso a primitiva receive, necessita dos seguintes parâmetros:
receive(in : tipo, grupo_id,identi f icador_mensagem, f iltro;out : mensagem)
• tipo: de acordo com este parâmetro a primitiva receive() pode ter um comporta- mento bloqueante ou não:
BLOCK: bloqueante, fica a aguardar a disponibilidade de mensagem;
NO_BLOCK: não bloqueante, se não existir mensagem para ler, retorna de ime-
diato com mensagem vazia;
• mensagem: conteúdo de dados a ser entregue;
• f iltro: permite efectuar uma leitura de mensagens, que obedeçam às definições do filtro, ou seja pode ser efectuado um processamento das mensagens de modo a aceder somente a determinado tipo de mensagens18. Indicando este filtro um valor que identifica o tipo de mensagem que se pretende ler. Este parâmetro assume significado no contexto de grupo, dado que, no caso das entidades ele- mentares todas as mensagens que lhe são explicitamente dirigidas têm que ser sempre processadas por esta;
• identi f icador_mensagem: este parâmetro permite identificar inequivocamente uma dada mensagem. Este valor é conhecido pelos membros do grupo após ter sido enviada uma mensagem (send()) com NOTIFY, sendo necessário para que os membros consigam ter acesso à mensagem sobre a qual foram notificados;
18As mensagem podem obedecer a um determinado formato no qual podem ser indicados, por exem-
UM MODELO DE COMPUTAÇÃO BASEADO EM GRUPOS
• grupo_id: identificação do grupo, necessária quando a leitura é efectuada da fila global do grupo, dado que as entidades podem efectuar leituras da fila de men- sagens ou dos grupos a que pertencem. No caso do grupo, a leitura é efectuada da sua fila global, onde o representante do grupo colocou a mensagem. Note-se que a fila global do grupo só pode ser acedida por membros do próprio grupo, não sendo visível do exterior.