especificaÇÃo e sincronizaÇÃo de aplicaÇÕes...

158
ESPECIFICAÇÃO E SINCRONIZAÇÃO DE APLICAÇÕES MULTIMÉDIA COM CONTROLO DISTRIBUÍDO Luís Filipe Lourenço Bernardo (Licenciado) Dissertação para a obtenção do grau de Mestre em Engenharia Electrotécnica e de Computadores Junho de 1994

Upload: dinhlien

Post on 10-Nov-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

ESPECIFICAÇÃO E SINCRONIZAÇÃO DE

APLICAÇÕES MULTIMÉDIA COM CONTROLO

DISTRIBUÍDO

Luís Filipe Lourenço Bernardo

(Licenciado)

Dissertação para a obtenção do grau deMestre em Engenharia Electrotécnica e de Computadores

Junho de 1994

ii

j ,objectos são representadas utilizando estados, que agregam uma parcela dascaracterísticas internas, as acções relacionadas com ela, e os eventos gerados peloobjecto associados a modificações nessa parcela das características.

Descreve-se como todos os conceitos relacionados com os objectos multimédiasão tipificados, sendo a informação relevante mantida numa base de dados, para quetodas as aplicações e ferramentas no sistema tenham conhecimento das possibilidadesdisponíveis em cada momento, facilitando a expansibilidade do sistema, e permitindoverificações de consistência durante as várias fases do desenvolvimento de umaaplicação.

Define-se uma linguagem de especificação de aplicações multimédia, baseadaem álgebras de processos. Para essa linguagem, descreve-se um algoritmo decompilação genérico, e um compilador que o implementa para criar máquinas deestados.

As aplicações alvo consistem em conjuntos de objectos autónomos queinteragem entre si no plano temporal, espacial e lógico. A abordagem neste trabalhofoi controlar esta interacção de um modo distribuído, dentro de cada objecto, pelainterpretação de máquinas de estado derivadas da especificação.

iii

p j ,characteristics are represented by a set of statuses. Each status combines a part of theobject internal state, the related actions and the events the object can send to theexterior to announce changes in that part of the object.

All the concepts related with multimedia objects are typed, the relevantinformation being stored in a database so that all the applications and tools in thesystem know the possibilities available at any moment. This feature can be used as asupport for expansion of the system and allows for consistency checks at each step ofthe application development.

A language based on process algebras is defined, and used to specify themultimedia applications. A generic compilation algorithm for that language is used ina compiler, to generate state machines.

A target application consists of sets of multimedia objects interacting with eachother in time, space and logically. The approach in the thesis was to control thisinteraction from a distributed point of view - Each object interprets its own statemachine derived from the overall specification.

iv

Sincronização multimédia

Composição multimédia

Classificação em tipos

KEYWORDS

Multimedia objects

Distributed multimedia systems

Distributed Control

Multimedia synchronization

Multimedia composition

Type categorization

v

dissertação, que levou a numerosos melhoramentos no estilo e na correcção.

Aos meus colegas do IST e do INESC, agradeço a amizade, a ajuda prestada e o

excepcional ambiente de trabalho. Devo referir, em especial, o Prof. Vítor Vargas, o

Eng.º Paulo Pereira e o Eng.º Nuno Correia, que contribuíram de forma decisiva para

a realização desta dissertação.

Por fim, agradeço à minha família o apoio e incentivo que sempre me deram ao

longo da minha vida de estudante.

Dedico, por isso, esta dissertação aos meus Pais.

Lisboa, Junho de 1994

Luís Filipe Lourenço Bernardo

vi

AGRADECIMENTOS......................................................................................... V

ÍNDICE ........................................................................................................... VI

LISTA DE FIGURAS ......................................................................................... X

LISTA DE TABELAS......................................................................................... XIII

NOTAÇÃO...................................................................................................... XIV

CAPÍTULO 1. INTRODUÇÃO ........................................................................... 1

1.1. INTRODUÇÃO .................................................................................. 1

1.2. OBJECTIVOS................................................................................... 2

1.3. ESTRUTURA DA DISSERTAÇÃO......................................................... 3

CAPÍTULO 2. TRABALHO RELACIONADO........................................................ 5

2.1. MODELOS DE SINCRONIZAÇÃO......................................................... 5

2.2. SISTEMAS....................................................................................... 8

2.2.1. Infra-estrutura de programação orientada a

objectos da universidade de Genebra ....................... 8

2.2.2. Modelos baseados em redes de Petri ...................... 11

2.2.3. MADE ....................................................................... 15

2.3. NORMALIZAÇÃO .............................................................................. 19

2.3.1. WWW........................................................................ 19

2.3.2. Extensões ao ODA ................................................... 23

2.3.3. HyTime ..................................................................... 25

2.3.4. MHEG....................................................................... 28

vii

3.3. MODELOS DE COMPOSIÇÃO............................................................. 40

3.4. MODELOS DE CONTROLO ................................................................ 42

CAPÍTULO 4. ARQUITECTURA ....................................................................... 47

4.1. DESCRIÇÃO GERAL DOS OBJECTOS ................................................. 47

4.2. MODELO DE SINCRONIZAÇÃO........................................................... 49

4.3. ESTADOS, EVENTOS E ACÇÕES ....................................................... 51

4.3.1. Estado Contexto ....................................................... 54

4.3.2. Estado Anotação ...................................................... 55

4.3.3. Estado Remctrl ......................................................... 56

4.3.4. Outros Estados......................................................... 56

4.4. OBJECTOS COMPONENTES.............................................................. 57

4.4.1. Criação de Componentes......................................... 58

4.5. OBJECTOS MULTIMÉDIA .................................................................. 59

4.5.1. Criação de objectos multimédia................................ 62

4.6. ARQUITECTURA GLOBAL.................................................................. 63

4.6.1. Processo de Autoria ................................................. 64

4.6.2. Gestor de Tipos ........................................................ 65

4.6.3. Gestor de Nomes ..................................................... 67

CAPÍTULO 5. LINGUAGEM............................................................................. 69

5.1. INTRODUÇÃO .................................................................................. 69

5.2. ESTRUTURA GERAL ........................................................................ 71

5.3. ESTRUTURA SINTÁCTICA ................................................................. 72

viii

CAPÍTULO 6. IMPLEMENTAÇÃO ..................................................................... 86

6.1. AMBIENTE DE DESENVOLVIMENTO.................................................... 86

6.1.1. ANSAware ................................................................ 86

6.1.2. Suporte do modelo de comunicação. ....................... 91

6.1.3. Análise do desempenho ........................................... 93

6.2. OBJECTOS MULTIMÉDIA .................................................................. 96

6.2.1. Constituição dos Objectos Multimédia e

Componentes ............................................................ 100

6.3. MÁQUINAS DE ESTADOS.................................................................. 102

6.3.1. Linguagem................................................................ 102

6.3.2. Interpretadores ......................................................... 106

6.4. COMPILADOR.................................................................................. 110

6.4.1. Algoritmo de Compilação.......................................... 111

6.4.2. Compilador ............................................................... 117

6.5. EXEMPLO ....................................................................................... 123

6.6. COMPATIBILIDADE........................................................................... 128

6.7. LIMITAÇÕES.................................................................................... 131

CAPÍTULO 7. CONCLUSÕES .......................................................................... 134

7.1. CONCLUSÕES................................................................................. 134

7.2. TRABALHO FUTURO ........................................................................ 135

ix

x

Figura 2.1 : Relações possíveis entre dois intervalos. ..................................................6

Figura 2.2 : Rede OCPN base para representação de apresentações .......................... 12

Figura 2.3 : Mapeamento do ASP e NSP no modelo de referência OSI. .................... 14

Figura 2.4 : Ambiente de desenvolvimento MADE ................................................... 16

Figura 2.5 : O Navegador de WWW da NCSA, Mosaic em X Windows,

mostrando a página com os serviços locais ao INESC. ........................... 21

Figura 2.6 : Módulo de tradução de objectos HyTime............................................... 28

Figura 2.7 : Utilização do modelo MHEG................................................................. 29

Figura 2.8 : Diferentes níveis para uma aplicação multimédia em MHEG .................. 32

Figura 3.1 : Grupo de objectos componentes que constitui uma aplicação................. 41

Figura 3.2 : Arquitectura Centralizada de Controlo................................................... 42

Figura 3.3 : Arquitectura Distribuída de Controlo ..................................................... 42

Figura 3.4 : Exemplo de recepção de mensagens não atómica. .................................. 44

Figura 3.5 : Exemplo de recepção de mensagens com violação da ordem causal........ 44

Figura 4.1 : Modelo de um objecto multimédia. ........................................................ 48

Figura 4.2 : Estrutura do interface de um objecto componente.................................. 53

Figura 4.3 : Objecto multimédia mais simples em termos de composição................... 59

Figura 4.4 : Objecto multimédia com vários eventos ................................................. 59

Figura 4.5 : Composição de um objecto multimédia. ................................................. 60

Figura 4.6 : Estrutura interna de um objecto multimédia ........................................... 61

Figura 4.7 : Estrutura de um objecto multimédia composto....................................... 61

xi

Figura 5.4: Estruturas de declaração de objectos multimédia externos à

especificação. ......................................................................................... 75

Figura 5.5: Exemplo de declaração de um objecto multimédia................................... 76

Figura 5.6: Exemplo de uma especificação de comportamento. ................................. 85

Figura 6.1 : Modelo computacional do ANSAware................................................... 88

Figura 6.2 : Interacção com o Trader em ANSAware. .............................................. 88

Figura 6.3 : Arquitectura de uma cápsula ANSAware. .............................................. 89

Figura 6.4: RPC síncrono. ........................................................................................ 90

Figura 6.5: RPC sem resposta................................................................................... 90

Figura 6.6: RPC assíncrono. ..................................................................................... 90

Figura 6.7: Tempos de transmissão [ms] em função do comprimento, para ATM e

IPC. ....................................................................................................... 94

Figura 6.8: Tempos de transmissão [ms] em função do número de destinos para

ATM com servidores na mesma cápsula e em cápsulas diferentes. .......... 96

Figura 6.9: Tempos de transmissão [ms] em função do número de destinos para

IPC com servidores na mesma cápsula e em cápsulas diferentes.............. 96

Figura 6.10: Criação de um objecto multimédia de Diapositivos.............................. 101

Figura 6.11: Estrutura da definição de uma máquina de estados. ............................. 103

Figura 6.12: Operações utilizadas durante a criação de objectos e inicialização de

referências do novo objecto.................................................................. 105

Figura 6.13: Operações usadas entre máquinas de estados concorrentes.................. 105

Figura 6.14: Exemplo de declaração de máquina de estados.................................... 106

xii

Figura 6.18: Constituição dos elementos da árvore de comportamento. .................. 119

Figura 6.19: Constituição dos elementos da lista de objectos utilizados. .................. 119

Figura 6.20: Exemplo da secção de especificação de comportamento de um script.. 119

Figura 6.21: Estrutura de nós criada a partir do exemplo da figura 6.20. ................. 120

Figura 6.22: Máquina de estados criada para o objecto A, a partir do exemplo da

figura 6.20............................................................................................ 121

Figura 6.23: Máquina de estados de arranque da aplicação criada para o exemplo

da figura 6.20. ...................................................................................... 122

Figura 6.24: Especificação de uma aplicação de apresentação do sistema

desenvolvido. ....................................................................................... 124

Figura 6.25: Modificação para ter um tempo de apresentação da terceira página. .... 125

Figura 6.26: Primeira página da aplicação de demonstração. ................................... 126

Figura 6.27: Segunda página da aplicação de demonstração, quando o vídeo não

está a correr. ........................................................................................ 126

Figura 6.28: Segunda página da aplicação de demonstração, quando o vídeo está a

correr. .................................................................................................. 127

Figura 6.29: Terceira página da aplicação de demonstração. ................................... 127

xiii

Tabela 6.1: Tempos de transmissão [ms] em função do comprimento da

mensagem. ............................................................................................. 93

Tabela 6.2: Tempos de transmissão [ms] em função do número de destinos

invocados em paralelo no mesmo servidor. ............................................. 95

Tabela 6.3: Tempos de transmissão [ms] em função do número de destinos

invocados em paralelo em servidores diferentes. ..................................... 95

Tabela 6.4: Os tipos de objectos multimédia e de componentes implementados, e

os estados associados. ............................................................................ 97

Tabela 6.5: Código intermédio gerado durante a segunda fase de compilação do

exemplo da figura 6.20. ........................................................................ 121

xiv

informação relacionada com a programação está em caracteres de

máquina de escrever.

�• Expressões em línguas estrangeiras estão em itálico.

1

1.1. INTRODUÇÃO

O tratamento de sinais de banda larga por computadores em ambientes

distribuídos começa a ser hoje uma realidade. As evoluções recentes na tecnologia estão

a abrir uma nova gama de aplicações e possibilidades para os computadores,

introduzindo o termo multimédia em muitas das áreas tradicionais da ciência de

computação e criando novos temas de investigação e desenvolvimento.

No entanto, o termo multimédia banalizou-se, estando associado a um conjunto

de diferentes significados, conforme o meio onde for utilizado. Nesta dissertação o

termo refere-se à geração, representação, processamento, armazenamento e

disseminação de informação processável por computador, expressa por múltiplos meios

dependentes ou não do tempo, tais como dados, gráficos, desenhos, voz, áudio e vídeo

[Steinmetz 90]. O termo multimédia é usado num sentido lato, que tanto inclui os meios

simples (monomédia), como a composição de múltiplos meios, que poderá ser

sincronizada a nível do tempo, do espaço ou logicamente. A composição pode ser

definida a diferentes níveis de complexidade como a hipermédia ou outros mais

complexos como gráficos animados ou realidade virtual. Hipermédia define uma forma

de composição simples, que consiste na definição de documentos globais utilizando

documentos parciais com referências para outros documentos, através das quais se pode

navegar pelas várias partes do documento global.

Nesta dissertação vai-se definir um sistema mais potente e geral do que o

hipermédia, onde a estrutura de ligação entre entidades é passível de ser especificada. É

utilizada uma abordagem orientada a objectos, onde as unidades de estruturação das

aplicações são chamadas de objectos multimédia. Como primeira abordagem à sua

2

1.2. OBJECTIVOS

O objectivo deste trabalho é o estudo e a aplicabilidade da gestão distribuída de

sincronização para um sistema de desenvolvimento e apresentação de aplicações

multimédia interactivas distribuídas. Os componentes principais do sistema estão

representados na figura 1.1.

Autor

Sc rip t

Máquina

Estadosde

Ap lic aç ão

Ob jec tos

Multiméd ia

Utilizadores

Specification

Figura 1.1 : Componentes principais dosistema de desenvolvimento deaplicações multimédia realizado.

O autor constrói as aplicações multimédia escrevendo em linguagem textual uma

descrição designada por script. Um compilador lê como entrada essa descrição, e cria

um conjunto de máquinas de estado, que realizam a especificação. Quando a aplicação é

corrida, cada máquina de estados é interpretada por um objecto, conseguindo-se assim o

controlo de todos os objectos multimédia utilizados na apresentação. Os utilizadores

3

O segundo capítulo começa por descrever alguns modelos de sincronização,

seguindo-se depois a apresentação de um conjunto de outros sistemas e algumas normas

relacionadas com o trabalho desenvolvido nesta dissertação. Para além da descrição,

inclui também alguns comentários sobre as virtudes e limitações de cada sistema ou

norma apresentado.

O terceiro capítulo introduz um conjunto de problemas resultantes da distribuição,

descrevendo as abordagens propostas neste trabalho para os resolver. Mais

especificamente, descreve os modelos de comunicação, de falhas, e de controlo

adoptados nesta dissertação. Introduz ainda os modelos de composição, e a forma como

a distribuição dos componentes é modelada.

O quarto capítulo descreve o modelo de objectos multimédia e a sua constituição.

Na última secção, inclui uma descrição sobre a arquitectura global do sistema.

O modelo apresentado no quarto capítulo é uma evolução do proposto em

[Pinto 93], tendo sido apresentado em [Pinto+ 94]:

"A Constructive Type Schema for Distributed Multimedia Applications."Paulo Pinto, Luís Bernardo, Paulo Pereira.Proceedings BRIS'94. Hamburgo, Junho 1994.

O quinto capítulo define a semântica e a estrutura da sintaxe de uma linguagem

baseada em álgebras de processos, utilizada para descrever aplicações multimédia.

O sexto capítulo descreve como foi implementado o sistema de desenvolvimento

de aplicações multimédia interactivas distribuídas. Descreve o ambiente de

desenvolvimento utilizado, os objectos multimédia realizados, o interpretador e o

compilador. No fim, apresenta um exemplo, e alguns comentários sobre a

compatibilidade e limitações do sistema realizado.

4

5

sincronização, e as características fundamentais de cada um.

Nas restantes secções apresenta-se uma amostra de trabalhos relevantes, e uma

descrição de um conjunto de normas que já existem, ou estão em fase de

desenvolvimento, na área da multimédia.

2.1. MODELOS DE SINCRONIZAÇÃO

O modelo de sincronização descreve as relações entre a ordem de apresentação

dos vários objectos que constituem a aplicação, no domínio do tempo. As principais

abordagens à descrição de sincronização conhecidas da literatura são [Blakowski+ 92]:

�• Sincronização hierárquica. Os objectos multimédia são vistos como uma árvore

onde os nós denotam a apresentação sequencial ou simultânea das subárvores.

�• Sincronização baseada num eixo temporal. Os objectos monomédia são associados

a um eixo de tempo que representa uma abstracção do tempo real.

�• Sincronização em pontos de referência. Destina-se essencialmente a modelar

objectos dinâmicos, ou seja, que apresentam uma evolução no tempo. Essa

evolução não tem de ser obrigatoriamente fixa e previsível, como é apresentado

originalmente, mas pode variar fruto de interacções externas. Os objectos

monomédia dinâmicos são vistos como uma sequência de subunidades discretas

apresentadas tipicamente em intervalos de tempo constantes. À posição de uma

subunidade no objecto chama-se ponto de referência (reference point). A

sincronização entre objectos é definida através de associações entre subunidades

de diferentes objectos que têm de ser apresentadas ao mesmo tempo.

6

Cada objecto é caracterizado pelo intervalo de tempo que dura a sua apresentação.

Se for definida a acção atraso, então este tipo de sincronização permite modelar

qualquer relação que se possa estabelecer entre dois intervalos [Allen 83], como está

representado na figura 2.1. Existem treze relações possíveis, embora apenas se

representem sete, uma vez que as seis que faltam são relações inversas das

representadas, excepto a de igualdade que não tem inversa.

X YX before Y

X equals YXY

X YX meets Y

X overlaps YX

Y

X during YX

Y

X starts YX

Y

X finishes YX

Y

Figura 2.1 : Relações possíveis entre doisintervalos.

As estruturas hierárquicas são fáceis de usar e largamente divulgadas. As

restrições resultam de só poderem ser sincronizadas no início e no fim. Se se pretender

sincronizar apenas excertos do objecto, como no caso da legendagem de um vídeo,

então o objecto tem de ser partido em vários componentes consecutivos, deixando o

objecto de ser visto como uma unidade abstracta. Uma eventual utilização do mesmo

objecto noutro contexto de sincronização implicaria uma nova subdivisão do objecto.

7

ç q , j , g

a sua posição no tempo global. Este modelo apresenta limitações, resultantes de a

sincronização só poder ser definida em pontos fixos no tempo. Assim, não é possível

modelar com facilidade objectos que não têm um tempo de apresentação determinístico,

como aqueles cuja apresentação depende da interacção com o utilizador.

A sincronização em pontos de referência é a mais poderosa de todas, permitindo

modelar qualquer uma das outras. Tal como a sincronização por eixo temporal, suporta

a sincronização em qualquer instante da apresentação de um objecto, mas não tem

limitações em relação a objectos com tempos de apresentação variáveis, pois essas

variações só afectam o instante em que os pontos de referência são atingidos. Com este

tipo de sincronização, os objectos são vistos como uma sequência de pontos de

referência, e não como intervalos, embora, para efeitos de autoria se possam definir

intervalos em relação a dois pontos de referência.

O principal problema associado a este modelo de sincronização é que, ao

contrário do modelo de sincronização hierárquico, é possível definir especificações

incoerentes, onde se declaram dependências anticausais na sincronização de eventos,

com o consequente bloqueio (deadlock) da apresentação. É assim necessário utilizar

mecanismos para detectar as incoerências deste género.

8

orientada a objectos para aplicações multimédia [Gibbs 91]. O projecto baseia-se na

utilização do paradigma de objecto para modelar praticamente tudo, desde os

componentes até aos tipos de dados, e aos tipos de ligações entre componentes.

Objecto multimédia é definido como um objecto activo (ou seja, que tem estado,

métodos, e que pode executar acções autonomamente), que produz e/ou consome

valores multimédia, de um tipo específico e a um dado ritmo. Este objecto vai ter

associada uma lista de portos, onde cada porto define um fluxo de dados multimédia

independente, caracterizado por um tipo e pela direcção (entrada ou saída). Os objectos

multimédia chamam-se fontes (sources) se só gerarem valores multimédia, destinos

(sinks) se só consumirem valores multimédia, ou filtros (filters) se gerarem e

consumirem valores multimédia.

No sistema são definidas duas hierarquias de classes: uma hierarquia de relações

supertipo/subtipo para os tipos de dados, e uma hierarquia de classes com herança para

os objectos multimédia. A primeira define os tipos de dados multimédia, e é utilizada

para testar a compatibilidade nas ligações entre portos de entrada e os portos de saída. A

hierarquia de classes define as classes de objectos multimédia primitivos disponíveis,

contendo informação sobre os portos que os compõem, métodos na sua interface e

variáveis internas, sendo definidas relações de herança de protótipos entre as várias

classes.

Os objectos multimédia podem dividir-se em dois grupos: os objectos multimédia

primitivos e os objectos multimédia compostos. Os objectos multimédia primitivos

contêm as interfaces para os elementos básicos (em software ou hardware encapsulado

por uma interface em software) do sistema, como uma câmara de vídeo, ou uma janela

X Windows a correr um visualizador de diapositivos. Os métodos dos objectos variam

entre as várias classes, havendo um conjunto de funções comuns, como run e stop, e

9

Os modelos de composição, que incluem para além das relações de sincronização

relações topológicas, modificaram-se significativamente desde a versão original

apresentada em [Gibbs 91], até à versão mais recente, apresentada em [Mey+ 92, Mey+

93].

Em [Gibbs 91] a composição é toda feita ao nível dos objectos multimédia

compostos, sendo utilizados dois modelos de composição para descrever as aplicações:

composição de fluxos de dados (configurational relationships) e composição

temporal (temporal relationships). No primeiro são especificadas as ligações entre os

portos de entrada e de saída dos vários objectos (primitivos ou compostos) que

compõem o objecto composto.

Na composição temporal, é especificado o sequenciamento temporal dos

componentes sobre uma linha de tempo (timeline). O tempo lógico de cada objecto é

mapeado no tempo do objecto composto que o envolve. A partir deste mapeamento são

calculados os pontos de transição que delimitam o intervalo de tempo em que o objecto

está activo, que depois serão utilizados pelos objectos compostos durante o controlo da

apresentação. Quando a apresentação corre, dá-se um segundo mapeamento do tempo

do objecto composto, para o tempo de apresentação, o que permite o suporte de

operações como velocidade de apresentação variável ou inversão da apresentação.

A função dos objectos compostos é controlar a conexão e desconexão dos

componentes quando os pontos de transição são atingidos, e controlar o tempo de

apresentação dos vários componentes que compõem o objecto composto. O objecto

composto controla os relógios de apresentação de cada componente, de modo a garantir

que estes não estão dessincronizados com o relógio de apresentação, sendo configurável

a política de gestão adoptada. Uma das políticas possíveis é TEST_SYNC, onde o

10

ç , q p p

Por outro lado, a arquitectura de objectos desenvolvida teve uma base tecnológica, não

existindo conceitos lógicos que permitam ver esses componentes como um interface de

funções, insensível a modificações na tecnologia utilizada.

Em [Mey+ 92, Mey+ 93] são revistos os modelos de composição, tendo sido

acrescentado um, o modelo de composição de actividades.

O modelo de composição de fluxos de dados (dataflow) manteve-se desde a

versão de [Gibbs 91], tendo sido desenvolvido um editor gráfico [Mey+ 93] para a

especificação desta componente das aplicações, criando assim uma linguagem gráfica

de especificação.

O modelo de sincronização foi inteiramente revisto, passando de uma

sincronização baseada num eixo temporal para uma sincronização em pontos de

referência. Do ponto de vista de sincronização, os objectos são vistos como actividades

(instâncias da classe Activity), que podem receber eventos de aceitação (acceptance

events), e produzir eventos de notificação (notification events). Os eventos de aceitação

correspondem a métodos dos objectos em [Gibbs 91], e permitem modificar o estado

das actividades. Os eventos de notificação não existiam em [Gibbs 91], e são usados

pelas actividades para anunciar modificações no seu estado interno. Todas as

actividades vão ter pelo menos os eventos de aceitação run e interrupt, e o evento

de notificação end, podendo ter outros como stop, reverse, dependendo do tipo de

actividade (ou seja, objecto).

No modelo de composição de actividades, a dependência temporal é especificada

introduzindo a dependência da activação de eventos de aceitação, em função da

recepção de eventos de notificação, ou conjunções e/ou disjunções desses eventos,

definindo assim um conjunto de relações de causalidade. O modelo de composição

11

p ç ç p ç

Nos modelos de composição propostos em [Mey+ 92], foram ultrapassadas

algumas das limitações do modelo anterior [Gibbs 91], nomeadamente o suporte de

interacção com o utilizador. No entanto, o facto de se especificar as aplicações

utilizando independentemente a composição temporal e a composição de actividades,

pode introduzir problemas de inconsistência a nível das especificações. Uma solução

possível para o problema, seria converter as especificações feitas com a composição

temporal nas especificações equivalentes na composição de actividades, permitindo uma

posterior edição neste modelo de composição.

Há alguns problemas comuns às duas versões desta infra-estrutura de

programação de aplicações multimédia. A semântica da interacção com o sistema foi

definida a nível da implementação, não existindo nenhuma especificação formal. Este

facto foi minimizado com o desenvolvimento de editores gráficos, para a especificação

das aplicações, que impõem uma semântica. Por outro lado, não existe a gestão dos

tipos dos objectos a nível do sistema, o que obriga cada utilizador a conhecer quais são

as características dos objectos que vai utilizar, e os seus interfaces.

Este modelo foi desenvolvido para o suporte exclusivo de objectos multimédia,

não suportando objectos que não possam ser descritos como fontes, destinos ou filtros,

ou seja, que não tratem fluxos de dados dentro do modelo. Limita assim, a possibilidade

de adaptar aplicações já existentes para funcionarem dentro do modelo.

2.2.2. Modelos baseados em redes de Petri

Nesta secção é apresentada uma técnica para a especificação formal e modelação

de relações temporais para composição multimédia, baseada na utilização de um

modelo estendido de redes de Petri, o OCPN (Object Composition Petri Net) [Little+

12

; ( g

áudio), até níveis mais elevados de sincronização (como anotações de voz em vídeo).

Esta lógica define os modos como dois intervalos de tempo podem estar

relacionados. Qualquer descrição de um documento é assim constituída por um

conjunto de transições entre lugares que representam os intervalos de tempo.

P

P P

Figura 2.2 : Rede OCPN base pararepresentação de apresentações

Em [Little+ 90a] demonstra-se que o OCPN é isomorfo em relação à lógica de

intervalos temporais, conseguindo representar-se qualquer relação entre dois intervalos

(P , P ) com a rede representada na figura 2.2. A rede é constituída por dois lugares

associados aos intervalos, de duração e , mais um lugar P que representa um

atraso de . O tipo de relação temporal definida vai depender da relação entre os três

tempos, , e .

O refinamento consecutivo das redes de Petri é o mecanismo usado para suportar

os vários níveis de abstracção, que consiste em poder substituir-se uma subrede por um

único lugar.

Nesse artigo é fornecido um exemplo de uma base de dados para objectos

persistentes e imutáveis. Neste exemplo, os objectos são guardados recorrendo a uma

árvore binária, onde os ramos são estruturas iguais às representadas na figura 2.2 e as

folhas contêm os objectos guardados. A recuperação e apresentação de informação da

base de dados é realizada por um algoritmo recursivo, que percorre a árvore e cria um

processo para cada lugar. Durante a apresentação, o algoritmo constrói uma rede de

processos que replica a rede original.

13

( ) , ( ),

aos utilizadores em terminais interactivos.

Definem-se três níveis de integração para um sistema de informação distribuído:

um nível físico (que lida com comunicação); um nível de serviço (que fornece funções

para a composição de objectos); e o nível de interface com o utilizador (ligado à

apresentação e interacção com o utilizador).

Para os obter recorre a dois tipos de sincronização:

�• A sincronização de objectos multimédia, de alto nível, é utilizada para os

níveis de integração acima do físico, recorrendo a OCPN.

�• A sincronização de fluxos de dados, de baixo nível, é utilizada para o nível

físico de integração, onde os streams são produzidos, transferidos e apresentados como

amostras de tamanho finito em intervalos de tempo fixo, e corresponde à definição da

qualidade de serviço pretendida, com parâmetros tais como atraso médio e máximo. É

utilizada com objectos que são adquiridos simultaneamente, ou para controlar erros de

comunicação, como o jitter.

Em termos de protocolos, os dois tipos de sincronização vão estar associados a

dois níveis independentes [Little+ 91], o ASP (Application Synchronization Protocol) e

o NSP (Network Synchronization Protocol).

Na figura 2.3 está representado o mapeamento dos níveis ASP e NSP no modelo

de referência OSI para interligação de sistemas abertos [Rose 90]. O NSP foi mapeado

no nível sessão pois lida com o estabelecimento de conexão ponto-a-ponto,

autenticação, etc. No entanto, caso o nível transporte não forneça funções de controlo

da qualidade de serviço, terá de ser o NSP a fornecer esses serviços, tendo então

funcionalidades características do nível transporte.

14

Nível Lóg ic oNível Físic o

de Sincronizaçãoda Aplicaçãoe da Rede

Figura 2.3 : Mapeamento do ASP e NSP no modelo de referênciaOSI.

Para permitir o controlo distribuído, a rede OCPN é serializada e decomposta em

classes de dados independentes, sendo calculados os tempos de controlo para cada

subsequenciamento, utilizando um algoritmo descrito em [Little+ 91]. O percorrer da

rede OCPN é feito através da troca de pacotes de controlo entre as fontes e o destino.

Há algumas limitações inerentes às OCPN. Embora se consiga definir

agrupamentos de estados, estes são puramente sintácticos, não existindo um conceito de

alto nível que agrupe estados, tal como os processos nas álgebras de processos. Por

outro lado, as OCPN são demasiado estáticas. A rede não permite representar

significados semânticos diferentes de relações de tempo estático, como independência

no tempo entre dois estados. Para além disso, todas as interacções com o utilizador têm

de ser consideradas na rede, o que limita bastante a interacção com o utilizador.

Houve várias tentativas para ultrapassar estas dificuldades, como a descrita em

[Prabhakaran+ 93]. A abordagem utilizada foi o aumento do modelo OCPN de modo a

incluir interrupções do utilizador que modificam o tempo de execução de um lugar de

três maneiras possíveis: terminação da execução, modificação temporária do tempo de

execução ou modificação permanente do tempo de execução.

Embora se consiga resolver alguns problemas relacionados com a estaticidade da

rede, outros continuam, como a impossibilidade de representar a dependência da

15

p j ( pp p ), p

do programa comunitário ESPRIT III, e pretende definir e realizar um ambiente de

desenvolvimento orientado a objectos para aplicações multimédia. O desenvolvimento

do MADE está a ser feito em paralelo com os trabalhos do comité da ISO (ISO/IEC

JTC 1/SC 24), encarregado de definir um standard para ambientes de apresentação para

programação multimédia, o PREMO.

O ambiente completo MADE contém um conjunto de objectos e serviços

relacionados [Herman+ 93], como está representado na figura 2.4. Todos os objectos do

modelo são activos, e dividem-se em duas categorias: toolkit (biblioteca de

componentes) e utilitários (utilities). O nível de toolkit é composto pelos objectos base

do sistema MADE. O nível de utilitários é um nível definido em cima do nível de

toolkits, e é constituído por objectos complexos, que definem um interface de

programação com um nível de funcionalidade superior. O exemplo mais significativo

são os objectos interpretadores de scripts (roteiros), que no seu conjunto vão poder

definir várias Scripting Languages. As aplicações vão poder ser desenvolvidas

directamente sobre o conjunto de objectos do toolkit utilizando a linguagem de

programação mC++, ou então utilizando componentes definidas sobre os objectos

utilitários, como seja um script. Para além disso, existem definidos um conjunto de

utilitários (User Interface Tools), que definem um interface gráfico para acesso ao

sistema, como o editor de composições, o construtor de interfaces com o utilizador

(user interface builder) ou os editores monomédia.

16

Base deDados

Comunicação

Figura 2.4 : Ambiente de desenvolvimento MADE

Destacam-se dentro do MADE toolkit, objectos destinados a fazer interface com

bases de dados, e objectos específicos para a comunicação entre processos. Os primeiros

permitem a definição de objectos permanentes, enquanto que os segundos suportam o

acesso distribuído aos objectos. Para permitir utilizar estas funcionalidades, todos os

objectos MADE estão preparados para se converterem num formato apropriado para

serem guardados em bases de dados ou serem enviados por rede, e inversamente, para

reconstruir o seu estado interno a partir de dados nesse formato.

Os restantes objectos do toolkit estão organizados em dois grandes grupos, os

objectos média (Media Objects) e os objectos de combinação (Combination Objects).

Os objectos média têm como função controlar directamente diferentes média

numa maneira única, independente do equipamento ou firmware, existindo quatro

categorias principais: gráficos (suportando 2D e 3D), de animação, som e vídeo.

Os objectos de combinação suportam a combinação dos objectos média, existindo

cinco áreas de combinação: de imagem (Imaging), estruturação (Structuring),

sincronização (Synchronization), interacção (Interaction) e gestão de restrições

(Constraint Management). A combinação de imagens é feita utilizando objectos de

imagem (image objects), que permitem combinar várias imagens produzidas por outros

objectos numa imagem única. A estruturação permite definir agregados de objectos

organizados sobre a forma de um grafo, em programas interactivos. Para tal, usa

17

p j ç g ç

utilizando objectos de restrição (constraint objects), que suportam condições nos

tópicos de animação, sincronização de médias, interface com o utilizador e

posicionamento geométrico.

O esquema fundamental de sincronização temporal usado no MADE é a

sincronização em pontos de referência (reference point synchronization) [Correia+ 93].

Para cada objecto MADE sincronizável (que tem uma evolução temporal), pode-se

definir um conjunto de pontos de referência específicos ao média (como trama de vídeo,

amostra de som, etc). Cada ponto de referência tem associada informação como

instruções internas para sincronização e referências para outros objectos sincronizáveis

que devem ser sincronizados com ele. Quando o objecto atinge o ponto de referência, a

sincronização é feita por troca de mensagens com os outros objectos activos, esperando

pela resposta. Sobre este modelo de sincronização, o MADE toolkit definiu ainda um

mecanismo de sincronização baseado no tempo. Existe um objecto temporizador (timer)

que gera eventos de tempo, que são usados para controlar acções baseadas no tempo.

Os mecanismos de interacção entre objectos no MADE são baseados na troca de

mensagens síncronas entre objectos [Arbab+ 93a]. Para cada método do objecto, pode

haver duas formas de recepção de mensagens. O método por defeito (queued) recorre a

uma fila de espera, ficando o chamador suspenso até a mensagem ser servida. Se a

mensagem não tiver parâmetros e o método não retornar valores, então poder-se-á

utilizar o método amostrado (sampled), onde o chamador não fica suspenso, excepto

durante a comunicação da mensagem. A escolha de método de recepção para cada

método do objecto é interno ao objecto, e o mundo exterior não tem conhecimento

disso. Os métodos estão classificados segundo uma prioridade, sendo processados

primeiro os pedidos sobre métodos mais prioritários.

18

p p , p

�• gerir restrições. Por exemplo, quando se pretende apresentar uma animação com

uma bola saltitante e tocar um som cuja frequência e volume depende da posição

e velocidade da bola, e se pretende definir essa relação exteriormente à animação,

ou seja, tocar esses sons mesmo quando o utilizador move a bola com o rato.

Neste caso, o objecto com a animação pode delegar o tratamento das funções que

controlam a posição e velocidade da bola para um objecto de restrição, que se

encarrega de chamar as funções do objecto animação, e as operações de controlo

do som.

�• modelar a modificação dos comportamentos de elementos em animação.

�• representação da degradação progressiva (graceful degradation) da qualidade de

objectos, em aplicações de tempo crítico.

O MADE é um dos sistemas onde a definição dos objectos foi levada mais longe,

tendo-se definido um conjunto de mecanismos internos, que tipicamente são

considerados detalhes de implementação. No entanto, ao tornar-se opaca para o

chamador a semântica de recepção de mensagens do receptor de mensagens, impediu-se

a definição formal da operação de invocação de métodos, pois o emissor não sabe a

ordem por que os eventos vão ser processados, tornando eventualmente algumas

especificações ambíguas, pois a sua semântica vai depender da implementação das

operações.

O mecanismo de delegação é poderoso e eficiente, mas para ser correctamente

utilizado é necessário ter um conhecimento profundo dos componentes do sistema.

Assim, seria preferível ter mecanismos mais simples na interface de programação do

utilizador, embora se devesse continuar a utilizar a delegação internamente para

optimizar a implementação dos sistemas.

19

p ,

2.3. NORMALIZAÇÃO

2.3.1. WWW

Embora não seja uma norma internacional, o World-Wide Web (WWW ou W3)

[Lee+ 93], está a tornar-se uma norma de facto pela grande expansão que tem entre os

utilizadores da Internet. Apesar de não estar em linha coincidente com esta dissertação,

a sua importância e popularidade justificam uma breve referência à sua estrutura.

O WWW fornece um meio uniforme para obter informação disponível na

Internet. O utilizador pode aceder aos documentos navegando através de um conjunto

de hiperligações, passando transparentemente pelos vários servidores envolvidos, ou

então, requerendo pesquisas introduzindo texto (ou um comando complexo). Os clientes

WWW correm localmente, permitindo aceder à rede através de selecções com o rato.

Os clientes apresentam um interface uniforme para um conjunto de serviços fornecidos

por servidores existentes na rede (normalmente numa máquina diferente), que de outra

maneira, teriam de ser acedidos por aplicações específicas.

O WWW define:

�• Uma linguagem de hipertexto com marcas de formatação (HTML - Hypertext

Markup Language) que todos os clientes WWW devem entender, e que é usada

para a transmissão de elementos básicos, tais como texto, menus e informação de

ajuda. Esta linguagem tem um formato compatível com o standard SGML

[ISO 86].

20

g , p ç g ,

optimizado para o suporte de saltos em hipertexto.

As apresentações em WWW estão organizadas em páginas de informação

independentes, que têm vários componentes. Cada página pode ter figuras, texto e

entradas para ligações hipertexto, sendo cada página definida independentemente das

outras. Quando uma página é apresentada, é feita a apresentação em paralelo de todos

os componentes, que são carregados um a um dos servidores respectivos. Depois, o

cliente WWW bloqueia-se à espera de receber uma ordem para ir buscar outro

documento.

A iniciativa WWW ainda está em evolução, sendo previsível o suporte de novos

tipos de protocolos. Uma limitação que deverá ser ultrapassada, é a realização de um

serviço de nomes, que permita a referência a documentos por nome independente da

localização, ao contrário do URL, onde o endereço do servidor é um campo obrigatório.

Na figura 2.5 vê-se o navegador de WWW da NCSA, Mosaic em X Windows,

mostrando a página com os serviços locais ao INESC. No topo está indicado o título do

documento e o endereço (URL). O texto sublinhado corresponde a ligações hipertexto,

bastando seleccionar um item, para se saltar para o documento correspondente. No caso

representado, as opções disponíveis são: servidores locais ao INESC de um protocolo

específico (ftp, Archie, X.500, Gopher); ligações para documentos internos; ou então

ligações para serviços externos.

21

Figura 2.5 : O Navegador de WWW da NCSA, Mosaic em XWindows, mostrando a página com os serviços locaisao INESC.

Na tabela 2.1 são comparadas algumas das características de vários sistemas de

pesquisa de informação em rede. Na tabela só são apresentados o WAIS (Wide Area

Information Server) [Addyman 93], o Internet Gopher [Anklesaria+ 93] e o WWW,

embora existam outros sistemas relevantes1.

1Em [Obraczka+ 93] é apresentada uma lista exaustiva dos sistema de pesquisa de informação

existentes na Internet.

22

externoHipertexto - - Sim

Funções:Pesquisa Sim Sim SimRefinamento dePesquisa

Sim - -

Referência a outrosservidores

- Sim Sim

Protocolos suportadospelos clientes:

WAIS Sim por gateway SimX.500 - por gateway por gatewayFTP - por gateway SimNNTP (Net News) - por gateway SimGopher - Sim SimHTTP - - Sim

Tabela 2.1: Comparação de vários sistemas de informação em rede.

Os três sistemas são baseados numa arquitectura cliente-servidor, no entanto a

forma como o utilizador acede à informação é diferente: No WWW e no Gopher o

utilizador acede à informação navegando no espaço de informação disponível, que está

ligada respectivamente por um conjunto de ligações hipertexto e um sistema de menus.

No WAIS, o utilizador acede à informação através de um mecanismo de pesquisa

baseado em perguntas a uma base de dados distribuída de índices para documentos.

Observe-se ainda a crescente compatibilidade com outros protocolos, desde o

WAIS até ao WWW, que oferece um interface para um conjunto significativo de

serviços de acesso a informação na Internet.

A versão actual de WWW é basicamente um sistema de hipertexto distribuído,

não suportando a apresentação de média com uma variação temporal, como vídeo ou

23

2.3.2. Extensões ao ODA

Nesta secção descreve-se outra aproximação à sincronização multimédia que

consiste numa extensão da norma ODA (Open Document Architecture) [ISO 89], de

forma a incluir relações temporais [Hoepner 91].

Actualmente o ODA define conteúdos de tipo carácter, gráfico e imagem. Foram

definidas extensões ao ODA para integrar tipos de dados dependentes do tempo nesta

norma, tais como áudio e vídeo.

No modelo estendido, a sincronização é representada em termos de acções

(actions), definidas entre dois eventos (unidades atómicas de acção), o startpoint e o

endpoint. Estes eventos tanto podem ser definidos em unidades absolutas de tempo,

como referidos relativamente a outras acções. As acções subdividem-se em atómicas

(se não têm pontos de referência entre o startpoint e o endpoint), que não são

subdivisíveis para efeitos de sincronização, e acções compostas, que agrupam acções

atómicas ou compostas.

O modelo de sincronização abstracto é baseado em expressões de caminho (path

expressions) [Campbell+ 74], que descrevem a sequência de operações permitidas. Os

operadores de caminho definidos são:A B (Parallel-last): As acções A e B têm um startpoint comum e são executadas

concorrentemente. A acção composta termina quando todas as acções

intervenientes terminarem.A B (Parallel-first): As acções A e B têm um startpoint comum e são executadas

concorrentemente. A acção composta termina quando pelo menos uma das acções

intervenientes terminar.

24

ç p q çAi* (Repetition): A acção é repetida o número de vezes que for especificado, ou

caso não esteja definido, será o utilizador a controlar o número de vezes.N A: (Concurrency): A acção A deve ser executada N vezes concorrentemente.

No artigo mostra-se que se se definir uma acção T (temporizador), o conjunto de

operadores (Parallel-last, Parallel-first, Sequential) permite representar qualquer

relação temporal possível entre duas acções (interpretadas como intervalos).

A integração da informação de sincronização no modelo de ODA foi feito apenas

na estrutura de exposição (layout structure), tendo sido deixada a integração dessa

informação na estrutura lógica (logical structure) para trabalho posterior.

A integração das expressões de caminho foi feita reorganizando-as, de maneira a

adaptar-se à estrutura em árvore, utilizada em ODA para representar a informação de

exposição. Cada nó da árvore contém os operadores, e as folhas contêm as acções. Para

além disso, definiu-se um conjunto de novos atributos para definir o comportamento

dos objectos face ao tempo, nos quais foram mapeados os vários operadores definidos

para as expressões de caminho:

�• CONTENT TEMPORAL TYPE (para objectos básicos), define se o objecto

conteúdo associado é invariante no tempo, ou variante no tempo.

�• DURATION (para objectos básicos), define a duração de cada acção.

�• OBJECT SYNCHRONIZATION TYPE (para objectos compostos), contém

expressões de caminho com os operadores Parallel-last, Parallel-first, Sequential

e Selective.

�• REPETITION (para objectos compostos), para representar o operador Repetition.

25

q , p ç p ç

utilizador.

Como se pode ver em [Lauer 75], debaixo de algumas condições, as expressões de

caminho podem ser vistas como equivalentes das redes de Petri. Consequentemente,

este modelo vai sofrer de problemas semelhantes aos vistos para a representação com

redes de Petri. No entanto, e em relação ao OCPN, ele apresenta uma maior

flexibilidade para representar interacções com o utilizador, permitindo representar

algumas relações de tempo não estáticas. Como as interacções com o utilizador se

encontram limitadas à activação de objectos, não é possível representar outro tipo de

sincronização, como por exemplo, modificar propriedades dos objectos.

2.3.3. HyTime

O HyTime é uma generalização da linguagem de marcação SGML (Standard

Generalized Markup Language) [ISO 86] para incluir hipermédia, de modo a permitir

representar ligações hipertexto, as relações temporais entre os diversos tipos de

documentos e novos tipos multimédia. Foi desenvolvido para permitir a troca de

documentos hipermédia entre aplicações, eventualmente desenvolvidas para diferentes

plataformas, introduzindo novas construções na linguagem SGML usando as facilidades

de DTD (document type definitions), nomeadamente algumas meta-DTDs (ou seja,

definições de tipo de documentos dentro de definições de tipo de documentos).

Em HyTime não é definido nenhum standard para a representação de dados ou

tipo de dados. Embora durante esta apresentação seja utilizada a palavra objecto como

um tipo de informação qualquer, desde texto a vídeo e scripts, esses objectos são

definidos pelas aplicações e não pela norma. Em HyTime a informação é transferida

26

ç q p ç ),

ou podem ser obtidos a partir de constantes na especificação.

O modelo de processamento convencional do HyTime põe a aplicação no controlo

de tudo o que acontece, recorrendo a serviços de apoio de um conjunto de programas

que formam a máquina HyTime (HyTime Engine). A máquina vai ser utilizada para

controlar a leitura e interpretação do documento, criando um descritor do documento,

que depois será utilizado para fazer a resolução de endereços, e sequenciamento em

termos das unidades do espaço de coordenadas.

A linguagem divide-se em seis módulos [NewComb 93], sendo os mecanismos de

composição suportados em quatro deles: módulo de endereço de Localização (Location

Address), módulo de hiperligações (HyperLink), módulo de espaço de coordenadas

finito (Finite Coordinate Space) e módulo de tradução (Rendition).

O mecanismo de SGML de endereçamento (#ID-#IDREF) foi expandido de modo

a suportar referências externas (e logo hiperligações). A informação pode ser

referenciada por nome (para entidades com nome único, como ficheiros, etc.), por

posição (para entidades num espaço mensurável, utilizando as unidades de tempo

definidas no módulo de espaço de coordenadas finito), e por semântica. Neste último

caso, pode ser por atributos ou por notação específica (semelhante a uma linguagem de

acesso a bases de dados).

O módulo de hiperligações define cinco tipos de hiperligações (hyperlinks)

[Newcomb 91]. Os mais relevantes são os plinks (property link), ligações com

propriedades, que permitem associar nomes de atributos e valores a uma ligação, e os

ilinks (independent links), ligações independentes, muito genéricas, que permitem

entre outras coisas, associar processamento ao atravessar da ligação.

27

p j p ç p ç ,

o objecto (ou vários objectos) é incorporado num intervalo, que representa a posição

inicial e extensão do objecto (ou objectos). Normalmente, os intervalos são definidos

em relação a valores do espaço de coordenadas, definindo uma sincronização baseada

num eixo temporal. No entanto, utilizando hiperligações, é possível definir a posição

inicial de um intervalo por referência a outros intervalos, assim como relacionar a

extensão de um intervalo com extensões de outros intervalos, suportando-se uma

sincronização em pontos de referência.

O atributo "EXTENT RECONCILIATION" vai permitir definir a estratégia

quando o objecto (controlado pela aplicação) não obedecer à extensão do intervalo

(controlada pela máquina HyTime). Vão existir várias estratégias possíveis como o

vamping (repetir o objecto tantas vezes até encher a extensão do intervalo) ou clipping

(se o objecto exceder a dimensão do intervalo é cortado).

O módulo de tradução, representado na figura 2.5, controla as distorções que os

objectos podem ter: projecção e modificação.

A primeira, chamada projecção, permite converter a posição e extensão de um

intervalo de um sistema de coordenadas para outro. Esta projecção poderá ser não

linear, por exemplo seleccionando apenas parte de uma imagem, ou modificando a

escala de tempo de modo a introduzir pausas ou efeitos especiais, como fading. Pode-se

estabelecer uma analogia entre esta transformação, e o que acontece num processador

de texto, quando converte um documento não formatado para uma versão formatada.

2o texto original [Newcomb 93] usa o nome event, mas esse nome é usado nesta dissertação com

outro significado distinto.

28

Objec to Ob jec toInverte c or Expande

Figura 2.6 : Módulo de tradução de objectos HyTime

A segunda distorção, chamada modificação, aplica-se a um intervalo, e consiste

numa modificação do conteúdo dos objectos nesse intervalo. O HyTime fornece uma

notação para especificar a aplicação de modificadores (externos ao HyTime) aos

objectos.

Embora esta norma seja bastante poderosa, segue uma orientação diferente da

dominante na área da multimédia. Define uma linguagem de estruturação comum para

documentos multimédia, onde todo o processamento dos tipos de dados é feito por

programas externos, em vez de os incluir na linguagem. Este facto, associado à natureza

não procedimental da linguagem, tornam difícil o acesso a facilidades específicas dos

objectos. Por outro lado, não oferece suporte para a interacção com o utilizador, que

terá de estar sempre escondida atrás de um objecto. Por fim, existem limitações

resultantes da utilização de atributos estáticos para definir a adaptação dos objectos aos

intervalos: A adaptação não é modificável no decorrer da aplicação, e está limitada ao

conjunto de valores suportados pela máquina HyTime.

2.3.4. MHEG

A sigla MHEG significa "Multimedia and Hypermedia information coding Expert

Group", e corresponde ao grupo de trabalho JTC1/SC2/WG12 da ISO/IEC, que

pretende definir uma representação codificada de informação multimédia ou

29

MHEGFormatador

MHEGAna lisador

MHEGob jec to

FormatoInternoFormato

InternoFormatoInternoFormato

Interno

FormatoInternoFormato

InternoFormatoInternoFormato

Interno

Figura 2.7 : Utilização do modelo MHEG.

A norma define uma aproximação orientada a objectos para a representação, onde

todos os detalhes internos de informação de apresentação são encapsulados debaixo da

abstracção objecto MHEG, acedendo a aplicação cliente através de funções de alto

nível (métodos). Os objectos MHEG são unidades de informação multimédia e

monomédia para efeitos de transferência pela rede, ou por memória de massa (figura

2.7). É feita uma distinção entre objectos MHEG, que contêm a estrutura de

informação reutilizável, e os visualizadores, que correspondem a uma dada

apresentação de um dado objecto. Para interpretar um objecto e inicializar um

visualizador sobre um dado objecto existe um sistema de suporte de run-time, a

máquina MHEG. Cada máquina MHEG poderá utilizar um formato interno local,

sendo o formato definido na norma [ISO 93b] usado obrigatoriamente apenas durante

transferências entre aplicações.

A interacção entre a aplicação cliente e os objectos (e internamente entre os

objectos) vai ser feita através da troca de mensagens. Embora o standard defina as

mensagens, a semântica associada ao uso e apresentação de objectos é definida ao nível

da aplicação, e não ao nível do MHEG.

30

ç p

�• Objectos de Acção que suportam a especificação de invocação de métodos

em objectos.

�• Objectos de Ligação (Link), que ligam satisfação de um conjunto de

condições sobre objectos (ou visualizadores) à execução de acções sobre um

ou mais objectos (ou visualizadores) destino. As condições são compostas

de uma condição gatilho sobre um objecto (ou visualizador) fonte, mais um

conjunto de condições adicionais (eventualmente noutros objectos ou

visualizadores).

�• Objectos Script, contêm um script codificado, mais a identificação da

linguagem de script utilizada. A classe é definida para especificar

interacções arbitrariamente complexas sobre objectos e visualizadores. O

formato dos scripts é definido externamente ao MHEG, sendo interpretados

por elementos da máquina MHEG, dedicados a suportar uma linguagem de

script.

�• Objectos Componentes que podem ser mapeados em visualizadores e interactuar

com a aplicação cliente. Definem-se três subclasses:

�• Objectos de Conteúdo (Content), correspondem a dados monomédia,

contêm a informação mais o atributo Hook, que define o formato dos

dados. Os objectos da classe Content também são utilizados para

transferir outros dados externos ao MHEG (como apresentações HyTime,

etc).

�• Objectos de Interacção correspondem a elementos de interacção com o

cliente com duas variantes: menus e entrada de dados.

31

j ç

média, métodos de codificação usados no objecto e recursos recomendados para o

sistema de apresentação.

2.3.4.2. Tipos de Acções

O norma MHEG descreve um conjunto de acções básicas, em termos do efeito

que elas têm nos estados dos objectos, e que se destinam a fornecer a estrutura mínima

para o objecto interactuar com a infra-estrutura. Para além destas, há acções específicas

para cada objecto, que fornecem um interface para a funcionalidade característica desse

objecto. As acções são suportadas pela máquina MHEG, sendo a sua semântica definida

localmente pela forma como a máquina MHEG, e a aplicação que suporta o objecto, as

interpreta.

As acções estão divididas em quatro grupos:

�• Acções de Preparação, que permitem a máquina MHEG manipular objectos.

No caso de objectos Componentes, vão controlar a instanciação de

visualizadores. Incluem as acções Prepare, Destroy, e Return, que

são comuns a todos os objectos, pois são herdadas da classe raiz da

hierarquia MHEG: MH-OBJECT.

�• Acções de Apresentação, que permitem controlar o estado dos

visualizadores, e contêm acções como Run e Stop.

�• Acções de Projecção, que permitem controlar a apresentação do objecto

num visualizador. Estas vão depender do tipo de média envolvido (texto,

som, imagem parada, gráficos, vídeo, ...).

�• Acções de Interacção, que permitem modificar os resultados de interacções,

e contêm acções como SetResponse e SetModifiability, para

32

ObjectoComposto

ObjectoComposto

aplicação multimédia em MHEG

Numa aplicação multimédia/hipermédia que utilize uma máquina MHEG, podem

existir vários níveis de controlo. A aplicação vai interactuar directamente sobre objectos

componentes através da máquina MHEG, constituindo o nível superior de controlo.

O segundo nível, será gerido pela máquina MHEG. Tipicamente, a aplicação vai

interactuar com objectos compostos, que têm definida internamente toda a informação

de sincronização necessária para gerir a apresentação dos objectos internos (em objectos

de Ligação e objectos de Script). Existe assim, uma duplicação de funções em relação à

sincronização de apresentações. Uma dada apresentação poderá ser especificada

utilizando um objecto composto, ou então, o controlo pode ser concentrado na

aplicação, que lida com objectos mais simples.

A nível da máquina MHEG, vão existir quatro níveis de sincronização :

1. Sistema. Neste nível a sincronização é muito próxima do stream de dados, como

no caso de sincronização de lábios com som de voz. A norma MHEG não suporta

este tipo de sincronização, mas vai recorrer a outras normas (como MPEG),

encapsulando este tipo de sincronização dentro de objectos de Conteúdo.

2. Espaço-Temporal. Define a posição no tempo ou espaço de um objecto em

função de outro. O MHEG vai suportar directamente este nível de sincronização

utilizando objectos de Ligação dentro de objectos Compostos. Este nível vai

suportar a definição de relações:

�• sequenciais entre dois objectos (apresentados continuamente sem atraso).

33

ç p j

�• sincronização cíclica para um ou mais objectos

3. Condicional. A satisfação de um conjunto de condições sobre objectos e

visualizadores pode desencadear acções noutros objectos. Novamente este tipo de

sincronização vai poder ser feito utilizando objectos de Ligação. Vai ser utilizado

para suportar documentos hipermédia.

4. Script. Este é o nível mais complexo, e é definido externamente à norma MHEG.

Um script poderá ter sincronização complexa que contabiliza respostas do

utilizador, valores calculados e o estado dos recursos locais à máquina MHEG. A

gestão deste nível de sincronização é feita em componentes dedicados da máquina

MHEG, a interpretar os scripts, e a interactuar com os restantes componentes da

máquina MHEG. Os scripts são guardados em objectos script, e são utilizados

internamente a objectos Compostos.

2.3.4.4. Comentários Finais

O MHEG e o HyTime são de entre todas as normas apresentadas, as mais

significativas na área da especificação de documentos multimédia. São, no entanto,

desenhadas para dois contextos diferentes. O MHEG assume implicitamente que os

utilizadores são aplicações interactivas baseadas em WANs, enquanto o HyTime não

faz assunções acerca da natureza do utilizador. No MHEG os objectos têm um interface

de funções, sendo suportada uma programação do tipo procedimental, o que é vantajoso

para tirar proveito das facilidades específicas de cada objecto. Por outro lado, suporta

directamente a interacção com o utilizador, sendo portanto mais adaptada para a

especificação final de aplicações multimédia. No entanto, as especificações não são tão

genéricas como as de HyTime, estando dependentes dos tipos de objectos que existem

definidos no momento da especificação da aplicação, e do interface que apresentam.

34

p ç , g q q

tendência será para surgirem no futuro WANs que suportam a qualidade de serviço

necessária para aplicações multimédia (como a RDIS de banda larga), observa-se que

esta norma é insuficiente para as necessidades futuras.

35

multimédia completamente funcionais. A nível comercial poder-se-á destacar o

Hypercard da Apple e o Viewer da Microsoft, ou ainda outros menos conhecidos, como

o BRAMA (Build, Run & Animate Multimedia Applications), desenvolvido no INESC.

Nesta dissertação é colocada a ênfase no suporte de aplicações onde os

componentes se encontram distribuídos geograficamente. Isso vai permitir a partilha de

recursos multimédia que ainda hoje são caros, abrindo a possibilidade de aparecer um

conjunto vasto de novas aplicações, que explorem a possibilidade de acesso de

utilizadores remotos. Mas se a distribuição traz grandes vantagens, também tem um

conjunto de problemas que é necessário resolver.

Neste capítulo são apresentados os modelos de comunicação, de falhas, de

composição e de controlo que foram adoptados nesta dissertação, sendo discutida a

influência da distribuição nas opções tomadas.

3.1. MODELOS DE COMUNICAÇÃO

Quando se desenvolve uma aplicação distribuída, ou seja, onde os vários

componentes da aplicação estão espalhados por vários locais, surge a necessidade de os

fazer interagir. É assim necessário que os componentes troquem informação entre si. O

modelo de comunicação especifica quais os modelos a adoptar para a troca de

mensagens nos vários domínios das aplicações multimédia.

Uma aplicação multimédia tem duas componentes distintas, dados e controlo, que

introduzem requisitos diferentes em termos de comunicação. Esses requisitos

introduzem a necessidade de utilizar protocolos de transporte distintos, para permitir

uma realização o mais eficiente possível.

36

vídeo e o áudio, que não suportam grandes atrasos, nem variações no ritmo de

transmissão. Em relação aos erros, existe alguma flexibilidade, podendo ser toleradas

algumas perdas, consoante o tipo de dados isócronos. Por exemplo, a perda de uma

imagem de um vídeo não comprimido, ou de alguns milisegundos de som não é

detectável por um utilizador humano. No entanto, esse facto já não se verifica com

vídeo comprimido segundo o formato MPEG [ISO 11172], onde há tramas que são

codificadas com informação diferencial, em relação a outras tramas. Se for utilizada a

classificação definida em [Andrews 91], então o modelo de comunicação para a troca

de dados isócronos que mais se aproxima do pretendido é a passagem de mensagens

assíncrona, no qual os canais têm, conceptualmente, capacidade ilimitada, pelo que o

envio de uma mensagem é não bloqueante. No entanto, este tem de ser enriquecido,

com a noção de qualidade de serviço fornecido, onde será especificada a largura de

banda mínima, o atraso e o jitter máximos.

Algumas das redes que suportam esta funcionalidade são:

�• ATM (Asynchronous Transfer Mode) [Prycker 91], modo de transferência

de informação utilizado na futura Rede Digital com Integração de Serviços

de Banda Larga (RDIS-BL). As classes A e B da Camada de Adaptação

ATM (AAL = ATM adaptation Layer) suportam a transferência de fluxos

de dados isócronos de ritmo binário respectivamente fixo e variável.

�• FDDI-II (Fiber Distributed Data Interface) [Prycker 91], uma rede local de

velocidade razoavelmente alta, que permite suportar tráfego isócrono.

�• DQDB (Distributed Queue Dual Bus) [Prycker 91], camada do nível MAC

(Medium Access Control) da norma IEEE 802.6, utilizada em redes

metropolitanas. Quando utilizada no modo PA (Pre-Arbitrated) fornece um

serviço isócrono.

37

p p , p

destinos, a um dado ritmo binário, e com características de atraso controladas.

O XTP (Xpress Transfer Protocol) [XTP 92] é um protocolo leve, concebido para

as redes de alta velocidade e que inclui as funcionalidades dos níveis rede e transporte

do modelo OSI. Este protocolo tanto pode funcionar em modo circuito virtual como em

modo datagrama, suportando controlo de erros por retransmissão selectiva, controlo de

fluxo, controlo de ritmo, e comunicação multiponto fiável.

O ATM apresenta um conjunto de características que o torna adequado para

suportar aplicações multimédia distribuídas a nível universal porque é extremamente

versátil suportando os serviços requeridos por futuros sistemas multimédia, e permite a

utilização de débitos variáveis e muito elevados. Assim, a futura RDIS-BL aparece

como uma das plataformas mais promissoras para o suporte de aplicações multimédia

distribuídas.

3.1.2. Dados de Controlo

As mensagens de controlo têm especificações opostas aos dados multimédia

isócronos. Não pode haver perdas, embora possam existir alguns atrasos. Caso se

perdesse uma mensagem de controlo utilizada para activar a apresentação de um

objecto, então a apresentação poderia ficar incompleta, ou mesmo parada. A

sensibilidade em relação aos atrasos, vai ser tanto maior, quanto mais baixo for o nível

de controlo que se está a utilizar. Se se estão a enviar mensagens de controlo para

sincronizar dois fluxos de dados multimédia de fontes distintas, então os atrasos terão

de ser mínimos. Mas, se se estão a trocar mensagens para controlar a activação de

objectos, então a tolerância pode ser maior. De qualquer modo, para assegurar a melhor

38

, j , g p p

A troca de mensagens de controlo vai ser modelada pela passagem síncrona de

mensagens, utilizando a classificação definida em [Andrews 91]: O cliente que envia

uma mensagem bloqueia-se à espera que o receptor a receba, sendo os comandos de

entrada e saída de mensagens executados sincronizadamente. Este modelo foi

introduzido por Hoare na linguagem CSP (Communicating Sequential Processes)

[Hoare 85], permitindo a definição de uma semântica bem definida para troca de

mensagens de controlo.

A passagem síncrona de mensagens pode ser obtida com um conjunto vasto de

protocolos, sobre qualquer uma das redes referidas anteriormente. A eficiência máxima

é obtida com protocolos optimizados para o suporte de RPCs (Remote Procedure

Calls), onde se minimize o número de mensagens trocadas durante uma invocação

remota, seguindo esquemas semelhantes ao proposto em [Birrel 84]. Para além disso, os

protocolos devem suportar multicast fiável e o envio de dados eficientemente. Um dos

protocolos que satisfaz estas especificações é o XTP.

Existe ainda, um conjunto de sistemas de desenvolvimento de aplicações

distribuídas, que fornecem a funcionalidade requerida para a troca de mensagens de

controlo num sistema multimédia distribuído. Entre eles podem-se referir o ANSA, o

DCE e o Isis. O ANSA [Ansa 93] consiste numa das primeiras implementações da

arquitectura do ODP (Open Distributed Processing) [ISO 93], e suporta o

desenvolvimento de aplicações num estilo orientado a objectos, usando o modelo de

interacção cliente-servidor. O DCE (Distributed Computing Environment) [OSF 93] é

um sistema composto por um conjunto de componentes integrados que fornece um

ambiente para o desenvolvimento e execução de aplicações utilizando o modelo de

interacção cliente-servidor. Entre os serviços existentes no DCE incluem-se um serviço

39

p j

modo a ser compatível com o standard CORBA (Common Object Request Broker

Architecture) [OMG 91], ainda a ser definido.

3.2. MODELOS DE FALHAS

Numa realização centralizada, quando o sistema falha, tipicamente a aplicação

falha como um todo, ou por erro de programação, ou porque a máquina onde está a

correr falhou. Numa realização distribuída, o modelo de falhas complica-se, pois as

aplicações podem estar a correr simultaneamente em diversas máquinas, que podem

falhar independentemente. Neste caso as falhas podem-se dividir em dois grupos

[Lamport+ 90]: as falhas de comunicação e as falhas de processo.

As falhas de comunicação, assumem-se habitualmente como resultantes de perda

de mensagens, e são tratadas pelos protocolos de comunicação utilizados no sistema.

As falhas de processos, resultam de algum processo não funcionar, ou funcionar

mal. Podem ser definidas utilizando vários modelos [Lamport+ 90]:

�• Falhas de paragem: o modelo mais restritivo, o processo avariado não faz nada.

�• Falhas de omissão: o processo avariado não envia nenhuma mensagem.

�• Falhas Bizantinas: o modelo mais genérico, onde apenas se assume que o

processo avariado não afecta as comunicação entre os outros processos, mas pode ter

qualquer outro comportamento anormal.

Nesta dissertação foi adoptada uma subclasse do modelo de falhas por paragem, o

modelo fail-stop, onde para além dos processos avariados não fazerem nada, os outros

processos sabem que eles estão avariados. Esta opção complica o desenvolvimento do

sistema de suporte da arquitectura, pois introduz a necessidade de utilizar processos de

40

Os modelos de composição definem os contextos e paradigmas em que os

objectos podem interagir entre si. Estes modelos são os mecanismos que o autor utiliza

para construir uma aplicação. Quando se especificam composições num sistema

centralizado, descreve-se a sequência de apresentação dos objectos que constituem a

aplicação, e que são locais à máquina onde está a correr a aplicação.

No entanto, quando se está perante um sistema distribuído, há a necessidade de

fornecer configurações adicionais, pois aqui os objectos multimédia são decompostos

num conjunto de componentes, onde alguns geram os sinais multimédia, outros

consomem e apresentam os sinais multimédia, podendo ainda existir componentes que

modificam fluxos de dados multimédia. Neste caso, define-se porto como um terminal

de transmissão ou recepção de dados multimédia.

O modelo de composição de fluxos de dados, consiste na especificação das

ligações entre os portos dos componentes, e foi proposto originalmente em [Gibbs 91].

Neste artigo, a composição de fluxos de dados e a especificação da sincronização das

aplicações são feitas a nível global da aplicação, para todos os componentes nela

utilizados.

No entanto, do ponto de vista de especificação da sincronização das aplicações, é

mais simples para o programador de aplicações continuar a ver "objectos multimédia" e

não apenas um conjunto de componentes. O suporte de objectos multimédia

distribuídos, permitire simplificar a interacção com os diversos componentes, que é

gerida automaticamente, escondendo-se a distribuição no que diz respeito à

especificação de sincronização. O modelo de composição de fluxos de dados passa

então a ser utilizado apenas internamente aos objectos multimédia distribuídos, pois as

trocas de fluxos de dados são feitas apenas entre os componentes de cada objecto

41

g p p p ç q p ,

que são utilizados para compor quatro objectos multimédia, com os respectivos

interfaces de controlo. Os componentes são representados por círculos. Os portos são

representados por quadrados, que são internos ou externos aos círculos, respectivamente

quando são portos de entrada ou de saída.

Figura 3.1 : Grupo de objectos componentesque constitui uma aplicação.

Nesta dissertação, os objectos multimédia distribuídos são utilizados como a base

do processo de composição de aplicações, chamado-se simplesmente de objectos

multimédia, por analogia aos objectos em sistemas centralizados. Definem-se assim,

dois modelos de composição:

�• Um modelo de composição de fluxos de dados que descreve a configuração

dos objectos multimédia em termos de componentes e os fluxos de dados multimédia

entre eles.

�• Um modelo de composição de controlo que descreve o comportamento das

aplicações em termos de trocas de mensagens de controlo entre objectos multimédia.

42

O modelo de controlo, define a maneira como é feito o controlo das aplicações.

Para uma aplicação ser apresentada, devem existir no sistema controladores e objectos,

que interagem através da troca de mensagens de controlo. No entanto, podem-se definir

várias arquitecturas para controlar essa aplicação, utilizando uma maior ou menor

centralização do controlo. Os dois casos limites, são uma arquitectura completamente

centralizada, onde existe uma relação estritamente do tipo cliente-servidor entre o

controlador e os objectos, e uma arquitectura completamente distribuída, onde

associado a cada objecto existe um controlador responsável pelo controlo desse objecto.

Objecto MM

Controlador

Objecto MM

Objecto MM

Figura 3.2 : Arquitectura Centralizada deControlo

ControladorObjecto MM

Controlador

ControladorObjecto MM

ControladorObjecto MM

Figura 3.3 : Arquitectura Distribuída deControlo

Numa arquitectura centralizada, representada na figura 3.2, existe um único

controlador a correr a máquina de estados que controla a aplicação. O controlador

invoca as operações dos objectos, e recebe e processa toda a informação de controlo,

gerada por eles. Os objectos desempenham um papel passivo, de servidores do

controlador.

43

ç p

ter um gestor de nomes, que providencie o registo da identificação dos controladores

activos, de modo a tornar o seu acesso conhecido no sistema. Assim, sempre que um

controlador tiver de receber informação de controlo de outros controladores, ele tem de

divulgar o seu acesso, de maneira a que outros o passam invocar.

Comparando as duas arquitecturas, verifica-se que a primeira tem uma estrutura

mais simples. Verifica-se também que é mais eficiente em termos da utilização da

largura de banda disponível, porque enquanto na arquitectura centralizada os eventos só

são enviados para o controlador central, na distribuída, um evento pode ter de ser

transmitido para praticamente todos os controladores activos.

Por outro lado, a dificuldade de construção da máquina de estados também é

significativamente maior no caso da arquitectura distribuída. Os controladores só têm

acesso ao seu estado local, o que complica o suporte de: variáveis globais, que têm de

ser partilhadas por vários controladores; e operadores de sincronização cuja semântica

faça depender a transição da ordem de chegada das mensagens de controlo, como por

exemplo, o operador escolha (choice) no LOTOS [ISO 87] (símbolo []).

O problema da gestão de variáveis globais é semelhante ao enfrentado pelos

sistemas de gestão de objectos distribuídos, como por exemplo, o COMANDOS

[Sousa+ 91], podendo-se utilizar qualquer das soluções definidas nesse contexto. Três

soluções possíveis são: encapsular cada variável num controlador, sendo acedida através

da troca de mensagens de controlo; mapear a variável em memória partilhada; ou

migrar a variável para um controlador, sempre que ela for acedida.

O problema dos operadores de sincronização como o operador escolha, deriva de

poderem ser enviadas várias mensagens de controlo para vários controladores quase no

mesmo instante, que condicionam qual é a operação que deve ser feita a seguir. Caso a

44

( ) [ ], q g ç

recepção em todos os controladores para onde a mensagem foi enviada.

B1

B2

Figura 3.4 : Exemplo de recepção demensagens não atómica.

B1

B2

Figura 3.5 : Exemplo de recepção demensagens com violação daordem causal.

O facto de haver várias máquinas de estados a correr em paralelo, utilizando um

protocolo de transmissão de mensagens com atrasos variáveis, introduz ainda algumas

dificuldades adicionais, relacionadas com a recepção de mensagens fora da ordem

causal. No exemplo da figura 3.5, representa-se o envio da mensagem para dois

controladores B1 e B2, tendo o processo B1 gerado a mensagem após a recepção

de . Se o atraso no envio para B2 for muito grande, e de B1 para B2 muito pequeno,

então B2 vai receber a mensagem antes de ter recebido , o que pode gerar

inconsistências na máquina de estados do controlador B2. Este problema pode ser

ultrapassado, utilizando protocolos de comunicação de broadcast causais (Causal

Broadcast) [Isis 92], que garantem a ordenação causal na recepção em todos os

controladores para onde a mensagem foi enviada. Estes protocolos acrescentam à

mensagem original um campo com um vector de tempo [Schwarz+ 91], que contém o

tempo lógico do instante em que a mensagem foi enviada. Ao receber uma mensagem,

45

, q p ,

indiscriminadamente para todas as mensagens, mas apenas para aquelas onde a recepção

por uma ordem anticausal puder dar origem a erros, durante a apresentação da

aplicação.

Atendendo às dificuldades apresentadas para a arquitectura distribuída de

controlo, conclui-se que a arquitectura de controlo centralizada permite realizar a

máquina de estados de maneira mais eficiente para aplicações onde um único utilizador

interage com uma aplicação multimédia, ou com um conjunto de utilizadores passivos

(que não activam nenhuma aplicação).

Mas a arquitectura de controlo centralizada tem limitações quando se está perante

uma aplicação que envolva vários utilizadores com papéis activos durante a aplicação,

porque só é suportado um controlador. Assim, não existem mecanismos para os

utilizadores poderem correr partes da aplicação localmente, mas obriga sempre à

existência de um utilizador que tem de activar o controlador da aplicação.

Um dos exemplos mais elucidativos onde estas limitações se fazem sentir, são as

aplicações de videoconferência com suporte de trabalho cooperativo, destacando-se

entre os trabalhos desenvolvidos nesta área, o sistema BERKOM. O BERKOM

(Berliner Kommunikationssystem) [Altenhofen+ 93] é um dos primeiros projectos de

teste de RDIS de banda larga a nível mundial, que na sua segunda fase teve como

objectivo, oferecer uma única infra-estrutura de comunicação uniforme para as futuras

aplicações multimédia de banda larga. O projecto compreendeu três áreas de trabalho: o

Serviço de Transporte Multimédia [Boecking+ 92], que fornece a plataforma de

comunicação audiovisual, utilizando uma versão modificada do protocolo XTP sobre o

protocolo ST-II; o Serviço de Correio Multimédia, que facilita a troca de documentos

multimédia entre participantes nas videoconferências (onde são utilizadas as extensões

46

, p q

entrem em qualquer fase numa conferência, assumam diversos papéis (moderador,

participante, observador), e lancem aplicações que são partilhadas pelos restantes

utilizadores. Ao analisar a arquitectura desenvolvida, verifica-se que grande parte da

sincronização necessária corresponde a gestão de testemunhos (tokens) e a modificação

dinâmica de ligações entre portos. Assim, ele poderia ser realizado de uma maneira

natural numa arquitectura de controlo distribuído, onde cada participante estaria a correr

uma aplicação local, que interactuava com as aplicações dos outros participantes. A

solução adoptada no BERKOM foi fazer a gestão de testemunhos em servidores

centralizados, que são acedidos pelas aplicações dos clientes, obtendo-se assim uma

arquitectura com um servidor central rodeado de servidores periféricos.

Atendendo às limitações do modelo de controlo centralizado, verifica-se que a

solução óptima passa por uma solução mista, onde se usa uma organização hierárquica,

de arquitectura descentralizada exteriormente (se esta for necessária), para suportar a

interacção entre controladores, e sincronização centralizada internamente a cada

aplicação, para maximizar a eficiência.

47

foi adoptado. No fim, descreve-se a forma como os objectos multimédia são utilizados

na arquitectura global.

4.1. DESCRIÇÃO GERAL DOS OBJECTOS

Um modelo para objectos multimédia deve exibir as seguintes características:

�• Distribuição. O modelo deve contemplar a distribuição dos componentes, de

maneira a suportar a partilha de equipamento e informação multimédia, assim como o

suporte de interacção entre utilizadores em pontos distintos da rede.

�• Permitir qualquer tipo de interacção sobre os objectos. Os objectos

multimédia não se devem limitar a ser blocos não estruturados que apenas começam e

acabam, de uma forma atómica, mas devem permitir a definição de pontos de

sincronização intermédios.

�• Uniformidade. O modelo de sincronização deve ser suficientemente poderoso,

para permitir suportar de uma forma comum, a sincronização de especificações em

domínios diferentes, como relações temporais, relações espaciais ou relações lógicas.

�• Interacção com utilizadores. O modelo deve permitir um elevado grau de

interactividade com o utilizador.

�• Evolução. O modelo deve permitir modificar e criar novas funcionalidades de

maneira a suportar as constantes evoluções da técnica, tanto a nível de equipamentos

como normas de codificação de dados e métodos de os processar. Para tal, toda a

dependência tecnológica deve ser encapsulada, e a compatibilidade deve ser definida a

um nível de abstracção suficientemente elevado, que permita limitar ao mínimo as

48

modificam o fluxo de dados. Por exemplo, um objecto de vídeo seria decomposto no

componente que gera o fluxo de tramas de vídeo, e no componente que as recebe e

apresenta, e que pode existir numa máquina diferente. Os objectos componentes

podem subdividir-se em [Gibbs 91]:

�• Fontes (Sources), se só gerarem dados multimédia.

�• Destinos (Sinks), se só consumirem dados multimédia.

�• Filtros (Filters), se gerarem e consumirem dados multimédia.

Para efeitos de composição e sincronização, é mais simples continuar a ver o

objecto como um todo, e não como um conjunto de componentes. Seguindo a

abordagem apresentada na secção três do capítulo anterior, a distribuição é escondida

do utilizador, sendo oferecido um interface único para o exterior através de um gestor.

O gestor recebe as mensagens de controlo destinadas ao objecto e encaminha-as para os

componentes convenientes.

Fonte Destino

Gestor Figura 4.1 : Modelo de um objecto multimédia.

Na figura 4.1 está ilustrada a estrutura de um objecto multimédia. Os objectos

multimédia são entidades compostas por fontes, destinos, eventualmente filtros, e pelo

gestor. Na figura utilizou-se a notação introduzida na secção três do capítulo anterior,

onde os objectos componentes são representados por círculos, e os portos, que

representam pontos de entrada ou saída de dados multimédia, estão representados por

49

4.2. MODELO DE SINCRONIZAÇÃO

A sincronização de aplicações pode ser definida a vários níveis, dependendo da

finalidade que se pretende atingir. Pode-se definir uma sincronização de baixo nível,

onde a interacção é definida ao nível das unidades de transferência de dados multimédia

(por exemplo, as imagens de vídeo), ou então, trabalhar num nível superior, onde a

interacção é definida em termos do controlo da apresentação de objectos multimédia.

Neste trabalho optou-se por não suportar directamente uma sincronização de

baixo nível como a que é apresentada em [Little+ 91], e é o foco em outros trabalhos

como [Steinmetz 90] ou [Stefani+ 92]. A preocupação essencial nestas abordagens está

ligada ao sincronismo das apresentações dos elementos básicos dos streams de dados,

estando directamente associada à comunicação de dados. Assim, na sincronização de

baixo nível, são definidos operadores como o bloqueio restrito (restricted blocking)

[Steinmetz 90], para suportar o tratamento de situações singulares entre os elementos do

stream, como por exemplo, quando um deles acaba prematuramente e é preciso definir

o comportamento dos outros.

A sincronização de baixo nível é frequentemente pouco relevante do ponto de

vista do autor de uma especificação multimédia, que o que pretende é, garantir uma

qualidade de serviço de apresentação. A sua falta pode ser superada, na maior parte dos

casos, com a existência de um conjunto de objectos componentes que suportem as

funcionalidades base. Assim, no modelo desta tese, este tipo de sincronização é

realizada externamente ao modelo de sincronização, recorrendo a objectos componentes

específicos. Um exemplo de um objecto componente que deve existir é um objecto

50

p q ç , p

utilizados dois tipos de mensagens de controlo: os eventos e as acções.

Os eventos são mensagens de controlo que são geradas pelos objectos

multimédia, para notificar alguma modificação no seu estado interno. Os eventos

podem classificar-se como: eventos determinísticos, que ocorrem sempre pela mesma

ordem durante o funcionamento de um objecto; e eventos não determinísticos, que

modelam situações que podem não ocorrer, tais como intervenções do utilizador. Dois

exemplos de eventos respectivamente determinístico e não determinístico, são o evento

tipo Ev_End, gerado quando um objecto termina a apresentação, e o evento tipo

Ev_Click, gerado quando se prime o botão do rato sobre um texto ou imagem.

Os eventos têm tipos associados, que definem qual a modificação que houve no

objecto, e quais os parâmetros do evento. O tráfego de eventos é baseado em interesse:

os controladores só recebem um evento se registarem previamente o interesse num tipo

de evento ao objecto emissor.

As acções são mensagens de controlo que são utilizadas pelos controladores para

invocar os métodos no interface dos objecto, e controlar o seu funcionamento. As

acções não retornam parâmetros, e quando é mesmo necessário retornar dados, são

usados os eventos. Existe assim uma interpenetração grande destes dois tipos de

mecanismos.

O modelo de sincronização obtido com este mecanismo de controlo é

extremamente poderoso, e permite atingir três dos objectivos que foram propostos: de

permitir qualquer tipo de interacção sobre os objectos; uniformidade no tratamento de

vários domínios; e possibilidade de interacção com utilizadores. A uniformidade deriva

de os eventos terem tipos associados, e assim, para diferentes domínios são utilizados

eventos de diferentes tipos. O suporte de interacção arbitrariamente complexa com o

51

p p ç p

modelo, é de todos os apresentados no segundo capítulo, o mais versátil, e que foi

também adoptado nos trabalhos da universidade de Genebra [Mey+ 92] e no MADE

[Arbab+ 93a]. A sua versatilidade permite suportar todos os outros métodos de

sincronização descritos na introdução (sincronização hierárquica e baseada num eixo de

tempo).

Por fim, importa ainda realçar que com este modelo de sincronização, o

tratamento de falhas é integrado no processo de autoria de uma forma natural. Como foi

adoptado o modelo de falhas fail-stop [Lamport+ 90], quando um objecto falha, os

outros objectos podem detectar a falha, podendo ser gerado um evento de detecção de

falha, que será processado como qualquer outro evento de sincronização.

4.3. ESTADOS, EVENTOS E ACÇÕES

A solução apresentada comumente para a definição de um interface para os

objectos multimédia, é a existência de um interface único. Os grupos de métodos,

quando existem, são definidos com base em relações de herança [Gibbs 91], ou então

apenas a nível da descrição textual do sistema [ISO 93b], seguindo-se geralmente a

abordagem das linguagens orientadas para objectos. Isto é, seguindo a semântica

particular das linguagens no que respeita ao modelo de tipos de dados. Esta abordagem

introduz problemas, nomeadamente em relação à possibilidade de utilizar

especificações desenvolvidas para versões mais antigas dos objectos, que entretanto

podem ter tido algumas modificações nos métodos do interface.

Neste trabalho seguiu-se uma orientação multifacetada, na linha do modelo de

referência de ODP [ISO 93]: Em vez da definição de apenas um interface, cada objecto

52

g p , q p j ,

estado como um conjunto de estado interno mais lógica associada, cuja visibilidade

externa é um conjunto de operações e um conjunto de tipos de eventos. Na arquitectura

proposta, os estados são entidades tipificadas, e a cada tipo de estado está associado um

conjunto de acções, que também são tipificadas e constituem um interface, mais um

conjunto de eventos.

Há estados para velocidade, geometria, volume, etc. Associado ao estado

velocidade, por exemplo, está o tipo de evento Ev_speed, que indica uma

modificação da velocidade de apresentação do stream de dados, e um conjunto de

acções que permite ler e modificar a velocidade de apresentação. Se um objecto não

suportar o estado para velocidade, ele não pode interactuar com o exterior para mudar a

velocidade de apresentação, nem a aplicação usar eventuais modificações da velocidade

no objecto durante a sincronização da aplicação.

A forma como os estados interagem entre eles internamente nos objectos é um

assunto interno do objecto, e o programador é livre de implementar qualquer influência

que deseje, desde que os mecanismos de comunicação necessários sejam suportados.

Um exemplo onde essa influência cruzada deve ser realizada, é com o estado

relacionado com a largura de banda disponível (qualidade de serviço). Quando se

detectar uma diminuição no valor disponível, então deverão ser tomadas medidas para

reduzir a largura de banda necessária para a transferência dos streams de dados, como

reduzir a geometria do objecto, ou reduzir a velocidade de apresentação, enviando os

eventos respectivos, para os objectos que os requereram. Comparando esta abordagem

com a utilizada no MADE verifica-se que é mais simples, pois a utilização da delegação

para resolver este problema vai implicar a existência (pelo menos virtual) de mais

objectos no sistema.

53

p j p

A interface completa de um objecto multimédia, ou componente, é o conjunto

de todos os interfaces dos estados que ele suporta.

Na figura 4.2 está representado um esquema com um objecto componente, com

três estados internos, cada um com um interface com acções associadas e podendo gerar

eventos para o exterior.

Interfac e

Evento

Figura 4.2 : Estrutura do interface de umobjecto componente

Em termos de modelo computacional, os estados não introduzem nenhum

conceito novo, mas apenas um meio para relacionar interfaces. O conceito de estado é

muito útil por quatro razões principais :

1. evita a necessidade de desenvolver um interface comum para todos os objectos.

Evita-se assim a existência de métodos vazios, ou a sobreposição (overloading) de

operações com significados não intuitivos.

2. evita a necessidade de se ter de desenvolver o interface completo de um tipo de

dados de maneira a suportar qualquer evolução futura na tecnologia do

componente. A evolução vai poder ser realizada através de adição de novos

estados ao tipo antigo, criando um novo tipo.

54

4.3.1. Estado Contexto

O estado mais importante é o Contexto, que fornece as funções básicas para os

objectos poderem interactuar com outras entidades no sistema, sendo obrigatório para

todos os objectos componentes e objectos multimédia. O interface deste estado funciona

como um identificador único para cada objecto no sistema, permitindo obter todos os

outros interfaces suportados pelo objecto.

Acções EventosPlay()Stop()Destroy()Inform()RegisterStatusInterest()UnregisterStatusInterest()ReceiveEvent()

Ev_ReadyEv_StartEv_StopEv_End

Tabela 4.1: Acções e Eventos associados ao estado Contexto.

A tabela 4.1 mostra as acções e eventos associados ao estado Contexto. As

acções Play e Stop são utilizadas para iniciar e parar a apresentação do objecto,

sendo equivalentes às acções de apresentação existentes na norma MHEG [ISO 93b]. A

acção Destroy é utilizada para destruir o objecto, libertando os recursos reservados. A

acção Inform devolve uma lista de referências para os interfaces correspondentes aos

estados fornecidos como parâmetros. A acção RegisterStatusInterest é

utilizada para registar o interesse em receber eventos, sendo passados como parâmetros,

os estados a que estão associados os eventos, e a referência para o interface onde se

pretende receber o evento. A acção UnregisterStatusInterest cancela o efeito

55

q p _ g q j

chega ao fim da apresentação, passando em seguida ao estado inactivo. O evento

Ev_Stop indica que foi invocada a operação Stop, e foi parada a apresentação. Pode

também ser gerada quando for detectada uma falha no funcionamento do objecto, antes

do objecto passar ao estado inactivo.

4.3.2. Estado Anotação

O estado Anotação suporta a definição de pontos de sincronização intermédios

durante o estado activo de um objecto. Quando um objecto suporta este estado, deixa de

ser visto como um bloco que é activado do princípio ao fim, mas passa a ter posições

intermédias, podendo-se activar o objecto apenas num excerto da apresentação total.

Quando um objecto está activo e chega à posição correspondente a uma anotação,

é enviado o evento Ev_Annotation correspondente a essa anotação para todos os

objectos que a registaram. O registo pode ser feito no interface do estado Contexto,

para todas as anotações, ou então, apenas para um subconjunto das anotações, utilizando

a acção registerEventAnnotation do estado Anotação. Neste último caso,

regista-se o interesse numa lista ordenada de anotações, e caso a ordenação fornecida na

lista não seja compatível com a evolução da apresentação do objecto, é gerado o evento

Ev_RegisterAnnotationError.

As anotações estão subdivididas em diferentes tipos, que são geridos no gestor de

tipos do sistema. O tipo de anotação define o domínio de valores dos parâmetros, e a sua

interpretação. Existe um tipo base de anotação, Locator, com um inteiro natural

como parâmetro, que representa a posição interna dos objectos na apresentação. Para

além deste, podem ser definidos outros tipos de anotação, com outros parâmetros, como

por exemplo, um tipo Label, com um nome como parâmetro. Caso não se utilize o tipo

56

4.3.3. Estado Remctrl

Quando é utilizada uma arquitectura de controlo distribuída (introduzida na secção

3.4), são utilizados vários interpretadores para controlar a sincronização das aplicações,

que correm um conjunto de máquinas de estados. Esses interpretadores precisam de

trocar referências entre si sobre os símbolos utilizados, e de gerir dados internos das

máquinas de estados que são partilhados pelas várias máquinas, como por exemplo,

variáveis distribuídas. O estado Remctrl suporta estas interacções entre

interpretadores.

Para gerir a troca de referências utiliza as acções Bind e UnBind, que permitem

respectivamente associar e desassociar uma referência para um interface a um símbolo

(nome) existente na máquina de estados.

A gestão de variáveis distribuídas utiliza as acções Set, Read, e TestAndSet,

que permitem respectivamente modificar incondicionalmente o valor da variável, pedir

uma leitura, e pedir uma leitura e modificação condicional atómica do valor da variável.

O evento Ev_var é utilizado para retornar os valores das variáveis lidas.

4.3.4. Outros Estados

Para além dos três estados apresentados anteriormente, existem outros estados

mais simples, que são usados para tratar aspectos específicos dos objectos. Tipicamente,

são estados simples, como por exemplo o estado Velocidade, com acções para

modificar o valor da variável controlada (setSpeed e changeSpeed), e acções para

ler o valor (getSpeed). Para cada estado, existem frequentemente eventos que indicam

a mudança do valor da variável (no exemplo é Ev_Speed).

57

Os objectos componentes modelam fontes, destinos e filtros, seguindo uma

abordagem já consensual na literatura, como por exemplo em [Gibbs 91]. Os filtros são

usados principalmente para ligar fontes e destinos incompatíveis, fornecendo um modo

para introduzir conversores de formatos de dados e/ou conversores de métodos de

controlo de transferência. Poderão também ser utilizados para modelar comutação

dinâmica de ligações entre portos, funcionando como nós de comutação de streams de

dados multimédia.

O interface dos objectos componentes é definido pelo conjunto de estados que

suportam, e pelos portos que têm. No mínimo, um objecto componente suporta o estado

Contexto, mas pode e deve ter outros estados, associados a características específicas

do objecto, incluindo possivelmente um estado por cada porto suportado.

Cada porto define um fluxo de dados multimédia independente, e é caracterizado

por um tipo, e pela direcção (entrada ou saída). Assim, um porto de um componente só

pode ser ligado a outro, ou outros, se tiver a direcção oposta deles, e tiver o mesmo

tipo, ou um tipo compatível. A compatibilidade de tipos significa neste domínio, a

capacidade de um porto para tratar a codificação dos dados e os mecanismos para os

transferir.

O controlo dos portos de um objecto é feito através de estados específicos para

cada tipo de porto. É definida uma relação de herança entre os interfaces desses estados,

e a classe Porto, que define os métodos connect e disconnect. Estes métodos

permitem respectivamente interligar e desligar portos. Nos estados dos portos, vão ser

acrescentados métodos que se destinam a gerir a transferência de dados entre portos de

entrada e de saída. Estes métodos específicos não são visíveis a nível dos objectos

58

disponíveis. Por exemplo, para apresentar um stream de vídeo terão de ser utilizados

pelos menos uma fonte e um destino, havendo um conjunto de opções em relação ao

protocolo utilizado na transferência, em relação à geração dos eventos (quem é

responsável por gerar o evento X), etc. A relação de compatibilidade neste espaço vai

definir se dois componentes podem ser ligados, sendo assim mais complexa do que a

mera compatibilidade entre o tipo de sinais multimédia, pois terá de ter em conta todos

estes factores.

4.4.1. Criação de Componentes

A função de criação de objectos componentes no sistema proposto é realizada por

servidores de componentes. Estes servidores só suportam o estado

VidaComponentes, que oferece funções para a criação e destruição de instâncias dos

objectos componentes. Estes servidores desempenham um papel semelhante às fábricas

(factories) no modelo ODP [ISO 93] e ANSA [Ansa 93]. Esta funcionalidade também

está implícita no MHEG [ISO 93b], onde é realizada na máquina MHEG, através das

acções de preparação.

A acção para criar novas instâncias, Prepare, recebe como parâmetros principais

a lista de portos que deve criar e um conjunto de valores de propriedades, com

significado local ao objecto. Estas propriedades são utilizadas para inicializar as variáveis

internas da instância a ser criada, correspondendo tipicamente a nomes de ficheiros,

geometria inicial de apresentação, etc. A acção devolve um conjunto de referências para

os portos criados, e para o interface do estado contexto, que permite depois aceder a

todos os outros interfaces. A instância criada só vai ser conhecida por quem invocou a

operação, que poderá então partilhar a sua utilização com outros objectos.

59

A construção de aplicações multimédia vai ser baseada em objectos multimédia

(MM_objects em [Pinto+ 94]), que definem uma vista simplificada sobre os objectos

componentes. Um objecto multimédia é uma entidade activa que começa, tem um

tempo de vida, e termina, manipulando ou não dados multimédia [Pinto+ 93b]. Tal como

os objectos componentes, a sua interface é definida pelo conjunto de estados que

suporta. No mínimo terá o estado Contexto, mas tipicamente terá mais estados.

Em termos de composição, um objecto que não suporta o estado Anotação é

extremamente simples, como está representado na figura 4.3, onde a menor unidade de

sincronização será todo o objecto multimédia. Senão, terá uma estrutura mais complexa,

podendo-se utilizar todos os intervalos possíveis entre os eventos de anotação e o

Ev_Start e Ev_End, como unidades de sincronização. Caso o objecto suporte o

estado Anotação e Click por exemplo, e o utilizador active duas zonas sensíveis do

objecto durante a apresentação, então poder-se-á ter o esquema representado na figura

4.4. Os eventos não determinísticos, da activação dos botões, estão representados com

setas pequenas.

Ev_Start Ev_End

Figura 4.3 : Objecto multimédia mais simplesem termos de composição

Ev_Start Ev_EndCapitulo1 Capitulo2Botão A Botão B

Figura 4.4 : Objecto multimédia com várioseventos

Na primeira secção deste capítulo foi apresentada uma primeira abordagem da

constituição interna dos objectos multimédia. Definiu-se os objectos multimédia como

sendo constituídos por um conjunto (eventualmente vazio) de objectos componentes

interligados mais um gestor.

60

g p , q p g

4.5.

fonte destino

c ontrolador

d ispa tcher

Figura 4.5 : Composição de um objectomultimédia.

O dispatcher (despachante) é responsável por gerir estados que se encontram

distribuídos pelos vários componentes, criando um interface comum para esses estados.

No mínimo, gerirá o estado Contexto, desde que o objecto tenha mais do que um

componente. Quando um estado é gerido unicamente por um dos componentes, então o

dispatcher vai delegar o tratamento do estado no objecto componente. Um exemplo

típico, considerando o estado velocidade, seria o componente que controla a

transferência de informação gerir o estado pelo objecto. A delegação é totalmente

transparente para o utilizador do objecto, pois ele pede a referência para o interface do

estado, sendo então retornado o interface do objecto componente. O dispatcher tem

ainda a função de gerir as ligações de streams de dados entre os portos dos vários

componentes que coordena.

O controlador utiliza os serviços do dispatcher, e monta em cima destes um

sistema reactivo de controlo de sincronização, que recebe eventos (através da função

ReceiveEvent) e activa acções em objectos multimédia. O controlador pode não

existir necessariamente, ou então não ser utilizado, dependendo do tipo de controlo

utilizado. Quando é utilizado, processa as acções dos interfaces dos estados suportados

61

, p p ,

Eventos

Interfac e

dispatcher

C 1

C 2 C 3 C 4

Figura 4.6 : Estrutura interna de um objectomultimédia

MM_ObjectMM_ObjectObjecto MMMM_ObjectMM_ObjectObjecto MM

Controlador

Eventos Acções

Objecto multimédia composto

EventosAcções

Figura 4.7 : Estrutura de um objectomultimédia composto

Nas figuras 4.6 e 4.7 são apresentados dois exemplos de objectos multimédia, que

correspondem aos dois casos limites descritos anteriormente, em relação à utilização do

controlador.

No exemplo da figura 4.6 encontra-se representado um objecto multimédia

constituído por quatro objectos componentes C1 a C4, onde não é utilizado o

controlador. Os componentes foram representados utilizando a notação definida

anteriormente nesta dissertação. Existem dois estados que foram delegados para o

componente fonte C1 e para o componente destino C4. O gestor (que neste caso só usa

o dispatcher) vai gerir o estado Contexto interactuando com os vários componentes.

No exemplo da figura 4.7 é representado o outro caso limite, o de um objecto

multimédia composto, que não tem nenhum componente. Neste caso, o objecto

multimédia é o controlador, que gere internamente um conjunto de objectos

multimédia. Observe-se que modelo apresentado de objecto multimédia é perfeitamente

62

representa o conjunto de estados suportados pelo objecto, e a lista de componentes que

podem ser utilizados para o montar. Por exemplo, um vídeo de um certo tipo pode ter

como fonte um disco, e como destino um écran numa estação de trabalho. O destino

pode ser mudado para um televisor, desde que este suporte os mesmos estados que o

objecto associado à janela do écran da estação de trabalho e utilize o mesmo protocolo

de geração de sinais de controlo, ou seja, desde que sejam de tipos de componente

compatíveis. Se se tentar trocar a fonte por uma câmara de vídeo e se o estado

velocidade fosse implementado, então a troca não poderia ser feita, pois a câmara

não vai poder realizar esta funcionalidade. Tinha-se, deste modo, construído outro tipo

de objecto multimédia.

4.5.1. Criação de objectos multimédia

A criação de objectos multimédia é feita de uma maneira similar aos objectos

componentes. Existem no sistema servidores de objectos multimédia que suportam a

criação e destruição de qualquer tipo de objecto multimédia, e que são responsáveis pela

criação de instâncias dos gestores dos objectos multimédia. Estes servidores só suportam

o estado Vida, que tem operações semelhantes ao estado VidaComponente.

O Prepare passou a ter mais parâmetros, como a identificação dos objectos

componentes a serem criados e a configuração inicial das ligações entre os portos desses

componentes. O campo com os valores de propriedades, para além de transportar dados

para os componentes, também é utilizado para passar configurações iniciais para o

gestor, como por exemplo, se deve ser activado o controlador, ou se deve utilizar

unicamente o dispatcher. Tal como nos objectos componentes, é devolvida uma

referência para o interface do estado Contexto. Se a criação do novo objecto não

puder ser executada imediatamente, e o utilizador permitir, pode-se criar o objecto

63

Na primeira parte deste capítulo, foi descrito o modelo de objectos multimédia

adoptado. Nesta secção é apresentada a arquitectura global onde os objectos se inserem,

que está representada na figura 4.8.

Máquinade estados

UtilizadoresFontes,

Destinos,etc

Sc rip t

Specification

Ed itorGrá fic o

Autor Figura 4.8 : Arquitectura do sistema dedesenvolvimento de aplicaçõesmultimédia interactivasdistribuídas.

As aplicações multimédia são constituídas por um conjunto de objectos

componentes e gestores associados, que interagem através da troca de fluxos de dados

multimédia entre portos, e da troca de eventos e acções. O controlo é feito em

controladores, que correm máquinas de estados, especificadas num formato interno ao

sistema. Os utilizadores das aplicações multimédia interagem com as aplicações através

dos objectos.

Para além dos objectos multimédia associados a elementos de apresentação, como

objectos de vídeo e objectos de som, existem um conjunto de utilitários destinados a

fornecer aos utilizadores outros níveis de interacção com os objectos multimédia.

Assim, para correr aplicações, existem objectos interpretadores de máquinas de

64

p

As aplicações são especificadas utilizando descrições em linguagem textual,

chamadas scripts. Estas especificações são processadas por compiladores, que geram as

máquinas de estado utilizadas nos controladores.

Embora o modelo seja conceptualmente simples, para aplicações razoavelmente

complexas, torna-se difícil a um autor criar directamente o script, pois tal obriga-o a ter

conhecimentos sobre os objectos que existem, e sobre os interfaces que suportam.

Assim, para simplificar essa tarefa é definido um interface de desenvolvimento de

aplicações multimédia baseado na utilização de editores gráficos, que geram os scripts

a partir de especificações gráficas. Nesta dissertação não foi desenvolvido nenhum

editor gráfico. No entanto, pode-se utilizar um editor gráfico desenvolvido noutro

trabalho [Pereira 94], que utiliza uma linguagem de script compatível com a definida

nesta dissertação.

Durante as fases de especificação e a execução das aplicações é utilizado um

gestor de tipos a nível do sistema, que reúne informações sobre todos os tipos. O

sistema de run-time, as ferramentas de especificação e os compiladores utilizam essa

informação para fazer verificações.

Durante a execução das aplicações é utilizado um gestor de nomes para obter as

referências dos interfaces do objectos a partir dos nomes.

4.6.1. Processo de Autoria

O modelo de objectos e sincronização especificados são suficientemente genéricos

para permitir uma grande variedade de usos possíveis. No entanto, o autor típico não

pretende utilizar a totalidade das possibilidades do sistema, mas apenas algumas

características, que se adaptam ao problema que quer resolver. Assim, em vez de definir

65

g , p j g g ,

seguida no MADE [Herman+ 93], e é suportada em normas como o MHEG [ISO 93b].

4.6.2. Gestor de Tipos

Em todos os sistema multimédia é necessário garantir que o utilizador que vai criar

uma aplicação tenha conhecimento dos interfaces de acesso dos componentes do

sistema. Nos sistemas analisados no segundo capítulo, esta componente foi praticamente

ignorada, sendo a abordagem dominante, a de obrigar cada utilizador a conhecer os

interfaces dos componentes (eventualmente por documentação), ou incluir essa

informação nas ferramentas utilizadas para criar as aplicações. Nas normas HyTime e

MHEG, definidas para transferir objectos entre aplicações, houve a necessidade de

incluir meios para veicular informação adicional de natureza semântica associada aos

objectos [Newcomb 93], de modo a possibilitar a passagem dessa informação entre

aplicações diferentes, e logo com sistemas de tipos distintos. Nesta dissertação, é

defendido o modelo de gestão de toda a informação referente a tipos a nível global, num

gestor de tipos, em vez de criar 'ilhas' com tipos definidos localmente.

No modelo defendido nesta dissertação, não foi utilizada a relação de herança de

linguagens orientadas a objectos para definir as relações entre tipos. Em sua substituição

são utilizadas relações genéricas de subtipo entre tipos. Permite-se assim a definição de

relações de herança de interfaces que excluem a herança de código (geralmente

associada às linguagens orientadas a objectos), e sem estarem associadas a nenhuma

linguagem de programação em particular, assim como relações entre entradas da base de

dados do gestor de tipos que reflictam particularidades específicas (por exemplo,

componentes que podem ser agrupadas para gerar um objecto multimédia).

66

p

O gestor de tipos é utilizado por todos os utilitários do sistema. O editor gráfico

utiliza a informação guardada no gestor de tipos para saber acerca dos tipos de objectos

multimédia disponíveis para o autor. O compilador usa o gestor de tipos para realizar

verificações de consistência durante a compilação, ou mesmo para controlar a máquina

de estados gerada, como por exemplo, utilizando a informação sobre a natureza dos

eventos no que diz respeito ao determinismo. Os interpretadores das máquinas de

estados e os dispatchers usam a informação do gestor de tipos para fazer verificações

em run-time e para obter os códigos de alguns tipos a partir do nome e vice-versa. Para

optimizar a eficiência do sistema, deve-se minimizar as verificações durante a

execução, aumentando-se necessariamente a quantidade de informação contida no

gestor de tipos.

Todos os tipos são identificados univocamente por um nome e por um número,

tendo um conjunto de atributos. Os atributos são constituídos por dados relacionados

com os tipos, como uma configuração por defeito para os objectos multimédia, e os

tipos de relações entre tipos, para suportar regras de compatibilidade. O gestor de tipos

guarda informação sobre os seguintes tipos:

�• Tipos de objectos multimédia. É guardada a lista dos tipos de estados que o

objecto multimédia suporta.

�• Tipos de objectos componentes. São guardados o tipo de componente (fonte,

destino, ou filtro), quais os objectos multimédia a que pode pertencer, quais os

estados que suporta e quais os nomes dos portos de entrada e saída com os tipos

de sinais associados.

67

p g p

do evento (determinístico ou não-determinístico).

�• Tipos de anotações. É guardada a assinatura dos parâmetros da anotação, que

pode ser qualquer combinação possível entre um inteiro e uma cadeia de

caracteres, pois são esses os campos disponíveis no evento Ev_Annotation,

usado para transferir anotações.

�• Tipos de acções. É guardada a assinatura dos parâmetros da acção.

4.6.3. Gestor de Nomes

O gestor de nomes gere uma base de dados de referências de objectos associadas a

nomes, e é utilizado para localizar objectos no sistema. Todos os objectos activos têm

um nome, que identifica o objecto univocamente, e têm um interface associado ao

estado Contexto.

Se um objecto quiser ser conhecido no sistema, então terá de registar o seu nome

e interface no gestor de nomes. Quando um objecto quiser interagir com outros, pede as

referências dos objectos a partir dos nomes, podendo depois interagir através do seus

interfaces.

O serviço pode ser utilizado por qualquer objecto multimédia, ou utilitário que

suporte um interface de estados, servidor de componentes, servidor de objectos, ou

ainda, pelo gestor de tipos.

Durante a criação dos objectos multimédia ou objectos componentes é necessário

localizar os servidores respectivos. Assim, os servidores activos registam referências

para os interfaces vida ou vidacomponente, no gestor de nomes. Caso a

arquitectura do servidor de nomes o permita, esta pesquisa pode ser mais complexa,

68

g

O gestor de nomes poderá ser realizado com o trader definido no modelo de

referência do ODP ou ANSA, mas nesse caso, as pesquisas terão de ser razoavelmente

simples porque o trader do ANSA foi apenas concebido para a identificação de

servidores activos no sistema. Para permitir pesquisas mais complexas, como por

exemplo localizar um servidor de componentes por nome de imagem ou vídeo, seria

necessária uma arquitectura mais poderosa, como a utilizada no serviço de directórios

X.500 [CCITT 88].

69

definir aplicações multimédia.

5.1. INTRODUÇÃO

A infra-estrutura proposta neste trabalho prevê a eventual utilização de várias

linguagens de especificação de aplicações multimédia diferentes. Essas linguagens de

especificação deverão ter um conjunto de características de maneira a simplificar a

interacção do autor com o sistema.

A linguagem deve ser expressiva de maneira a permitir descrever o máximo

número de aspectos do sistema, relevantes para o tipo de programador a que é

destinada. Deve ser simples, permitindo uma fácil aprendizagem, compreensão e

utilização, especialmente nas situações mais comuns. Deve ser eficiente, permitindo a

realização de ferramentas que gerem código eficientemente, a partir de uma

especificação nessa linguagem (script). Por fim, a linguagem deve ser abstracta e

formal. Deve ser independente da implementação, e permitir a definição precisa e sem

ambiguidades de aplicações.

No capítulo 2 desta dissertação foram introduzidas algumas linguagens de

especificação, como a OCPN, Extensões ao ODA e HyTime. Nesse capítulo foram

referidos algumas limitações, verificando-se que nenhuma das linguagens referidas

obedece completamente a todos os quatro princípios referidos. Para além dessas, pode-

se ainda referir outras linguagens de especificação relevantes como o RAVI [Kretz 90],

SMSL [ISO 93c] ou Esterel [Stefani+ 92]. O RAVI (Representation for Audio Visual

Interactive applications), é uma norma francesa para especificação de aplicações

interactivas audiovisuais, que influenciou a definição do standard MHEG, e que serve

70

p q p

composição. Por exemplo, no caso da composição de ciclos causais, não está definido

qual é o ciclo que deve ser incrementado, se o mais externo ou se o mais interno, sendo

somente definido quando se realiza um compilador ou um interpretador. O SMSL

(Standard Multimedia/Hypermedia Scripting Language) é baseado nas linguagens

SGML, e está em vias de ser proposto como uma linguagem de especificação na ISO,

mas ainda está numa fase muito primitiva de desenvolvimento. O Esterel tem uma

semântica bem definida, no entanto, foi desenvolvido para uma sincronização de baixo

nível, apresentando limitações relativamente a interacções de nível mais elevado, como:

a especificação de comunicação entre objectos; a definição de relações entre objectos

mais complexas do que causalidade entre eventos de tempo; e a especificação de

interacção com o utilizador.

Para representar aplicações multimédia de maneira a respeitar as quatro

características enunciadas, é necessário uma linguagem de programação que permita

representar facilmente a concorrência, e tenha uma definição formal. A utilização de

uma definição formal elimina as ambiguidades na interpretação da linguagem,

contribuindo para simplificar o desenvolvimento de compiladores. As álgebras de

processos obedecem às especificações requeridas, podendo-se utilizar o CCS (Calculus

of Communicating Systems) [Milner 89], o CSP (Communication Sequential Processes)

[Hoare 85], ou então variações destas, como o LOTOS (Language Of Temporal

Ordering Specification) [ISO 87] e o Occam [Gallety 90] respectivamente. Esta

abordagem não é original, tendo já sido desenvolvidas linguagens de especificação

baseadas no CCS [Eun 93], e baseadas no LOTOS [Pinto 93].

Nesta dissertação definiu-se uma linguagem baseada na álgebra de processos CSP,

com uma sintaxe semelhante à da linguagem Occam, para a definição do

71

p p ç g ,

complexidade da sintaxe e dos compiladores, à custa de algum aumento de

complexidade das especificações.

Na definição da linguagem evitou-se a utilização de operadores fortemente

assimétricos, como a interrupção, exceptuando os que são estritamente necessários,

como a execução alternativa de operações. Este facto possibilita com muitos menos

problemas a definição da inversão de apresentação de uma aplicação.

5.2. ESTRUTURA GERAL

As duas noções básicas numa álgebra de processos são a noção de processo e de

evento. Um processo é uma entidade que tem informação interna, e que pode

interactuar com outros processos. O evento é a unidade de sincronização entre dois ou

mais processos, que pode transportar dados.

Na linguagem que está a ser definida, a álgebra de processos é utilizada para

modelar o comportamento dinâmico de aplicações. Os processos são utilizados para

representar objectos multimédia (ou parte deles), que são as unidades de composição a

nível da autoria. Os eventos da álgebra de processos são utilizados para suportar os

métodos de sincronização definidos no modelo de interacções entre objectos

multimédia, que são a recepção de eventos multimédia, e a invocação de acções.

No CSP a comunicação entre processos faz-se através de canais, que têm um

identificador único. No caso da nova linguagem, eles não são considerados como

abstracções para a troca de mensagens. O receptor 'recebe' os eventos e gera as acções

referenciando o objecto multimédia emissor ou destino, conforme o caso. Este facto é

útil, pois a configuração de canais CSP depende da arquitectura de controlo que é

72

ç , p g g , p

estruturados suportam a definição de objectos multimédia compostos. Neste caso, a

utilização principal dos parâmetros é definir o conjunto de estados suportados pelo

objecto composto, e a forma como se relacionam com os estados dos objectos internos.

5.3. ESTRUTURA SINTÁCTICA

A descrição de uma aplicação multimédia é chamada de especificação. A

especificação suporta a definição de unidades de código compilável, que também

podem ser incluídas noutras especificações.

A declaração de uma especificação, é feita utilizando a estrutura representada na

figura 5.1. A declaração tem duas componentes distintas: a primeira parte contém um

conjunto de declarações; a segunda parte usa uma álgebra de processos para descrever o

funcionamento da aplicação.

SPECIFICATION NomeEspecificação [listaEventos] (listaParâmetros);

DefiniçãoAlias DefiniçãoObjectosMM DeclaraçãoVariáveis DefiniçãoProcessos

BEHAVIOUR ExpressõesComportamentoENDSPEC;

Figura 5.1: Estrutura da declaração de uma especificação

73

p ç q

especificação. A secção listaParâmetros suporta a utilização de objectos

multimédia externos à especificação, que são declarados como parâmetros.

A secção DefiniçãoAlias suporta um mecanismo puramente sintáctico de

substituição de uma cadeia de caracteres por um nome equivalente, que é interpretado e

substituído durante a compilação.

A secção DeclaraçãoVariáveis define uma variável para posterior

utilização, associando um tipo e eventualmente um valor inicial. Ao contrário do CSP

ou LOTOS, na linguagem que está a ser definida, as variáveis têm de ser declaradas

antes de serem usadas, e têm um tipo associado, que é usado para fazer verificações

semânticas durante a compilação.

A secção DefiniçãoProcessos permite atribuir nomes a processos,

permitindo a estruturação da programação e a reutilização de código. A sua estrutura é

apresentada na figura 5.2. Como se pode ver, é semelhante à estrutura das

especificações, sendo a diferença fundamental entre as duas, o facto de um processo não

ser compilável, mas apenas existir durante a fase de compilação.

PROCESS NomeProcesso [listaEventos] (listaParâmetros); DefiniçãoObjectosMM DefiniçãoAlias DeclaraçãoVariáveis DefiniçãoProcessosBEHAVIOUR ExpressõesComportamentoENDSPEC;

Figura 5.2: Estrutura da declaração de um processo.

74

Nas estruturas da definição de especificações e processos está sempre presente a

secção DefiniçãoObjectosMM, que contém a declaração dos objectos multimédia

que são utilizados. A figura 5.3 apresenta a estrutura da definição de um objecto

multimédia.

MMOBJECT NomeObjecto NomeTipo subEstrutura

listaDefiniçãoDados

listaComponentes expressõesLigaçãoENDOBJECT;

Figura 5.3: Estrutura da declaração de um objecto multimédia.

Um objecto multimédia é identificado univocamente por um nome, que é função

de NomeObjecto. O campo NomeTipo contém o nome do tipo de objecto

multimédia.

As secções listaComponentes e expressõesLigação contêm

respectivamente a lista com os componentes do objecto multimédia, e a configuração

inicial das ligações entre os portos dos vários componentes.

A secção listaDefiniçãoDados é utilizada para definir os valores iniciais

para o conjunto de variáveis de estados utilizadas no objecto, e que se encontram

distribuídas pelos componentes e pelo gestor do objecto multimédia.

Os objectos multimédia podem ter uma estrutura interna, definida por um

conjunto de eventos de anotação, que delimitam intervalos de apresentação dos

objectos. A secção subEstrutura suporta a definição de intervalos de apresentação,

75

p ç , ç p g

5.4.

MMOBJECT INLIBRARY NomeObjecto subEstrutura

listaDefiniçãoDados

identificadorBibliotecaENDOBJECT;

MMOBJECT EXTERNAL NomeObjecto NomeTipo subEstrutura

listaDefiniçãoDados

identificadorObjectoExternoENDOBJECT;

Figura 5.4: Estruturas de declaração de objectos multimédia externosà especificação.

Relativamente aos objectos externos, existem duas variantes, com duas sintaxes

ligeiramente diferentes. A primeira, identificada pela palavra chave INLIBRARY,

suporta a reutilização de especificações que foram definidas e agrupadas numa

biblioteca de especificações, identificada na secção identificadorBiblioteca.

A associação do objecto externo à aplicação é feito durante a compilação da

especificação.

Os objectos declarados com a palavra chave EXTERNAL são criados

externamente à especificação onde aparece a declaração, sendo os seus interfaces

obtidos através da consulta ao gestor de nomes do sistema. Este tipo de objectos foi

76

j

MMOBJECT viagem mpegType WITH SUB$STRUCTURE (

Primeira_parte Ev_Start <Label, ChegadaLondres> Segunda_parte <Label, AeroportoLondres> Ev_End

) FILENAME "viagem.mpg" WINDOW$X 100 WINDOW$Y 50 FRAME$RATE 25;

SOURCES mpegsrc; SINKS mpegsnk; LINK mpegsrc mpegsnk;ENDOBJECT;

Figura 5.5: Exemplo de declaração de um objecto multimédia.

A figura 5.5 apresenta um exemplo de uma declaração de um objecto multimédia

(interno) de vídeo. O objecto é composto por dois componentes, uma fonte do tipo

mpegsrc e um destino do tipo mpegsnk, que têm os portos correspondentes ligados

um ao outro. Estão definidos dois intervalos para este objecto, o intervalo

Primeira_parte, desde o início do vídeo até ao evento de anotação do tipo Label

e como o valor ChegadaLondres, e o intervalo Segunda_parte, desde o evento

de anotação com o valor AeroportoLondres até ao fim do vídeo. Em relação à

secção listaDefiniçãoDados, ela inclui o nome do ficheiro com o vídeo, a

posição inicial da janela, e o ritmo de apresentação das tramas.

77

básicas, consistindo nas operação de entrada, saída, atribuição e de abortar, onde é

seguida uma sintaxe semelhante ao CSP. O segundo grupo compreende um conjunto de

operadores que permite definir uma estrutura hierárquica de composição de operações,

onde é seguida uma sintaxe semelhante ao Occam.

Noutros trabalhos foi proposto que se separasse a declaração do comportamento

em duas secções independentes [Pinto 93], uma onde se especifica o comportamento na

ausência de intervenção do utilizador, apenas dependente de eventos determinísticos, e

outra onde são processados os eventos não determinísticos. Neste trabalho não foi

seguida essa orientação, havendo uma única declaração do comportamento. Desta

maneira, complicou-se a construção do compilador, que tem de fazer uma verificação

semântica muito mais complexa, nomeadamente para testar se existe a possibilidade de

bloqueio (deadlock); mas em contrapartida, a especificação de aplicações com muita

interacção com o utilizador torna-se mais simples.

5.5.1. Semântica

Para definir a linguagem de uma forma não ambígua, é necessário definir

formalmente a semântica dos operadores da linguagem. As semânticas operacionais

podem tomar várias formas, dependendo do aspecto a ser definido. Assim, para

representar expressões e variáveis poder-se-á utilizar uma semântica de avaliação

(evaluation Semantics) [Hennessy 90], que se limita a definir qual é o valor final

correcto para uma expressão. Mas para representar operadores complexos, é necessário

uma semântica mais completa.

Na comunidade das álgebras de processos é comum a utilização das semânticas

transicionais (transitional semantics) [Milner 89] para atribuir significado às

78

, p ), , p ç

de transição t é necessário definir um sistema de derivação transicional. Um

sistema de derivação transicional é definido por um conjunto de axiomas, regras de

inferência, e pelo menor conjunto de relações de transição que obedece a esses axiomas

e regras de inferência. A definição formal das operações da linguagem é feita através

desses axiomas e regras de inferência.

Nesta dissertação, a definição da semântica dos operadores é feita recorrendo a

uma semântica transicional. O conjunto T é definido pelos identificadores dos eventos e

acções, concatenados com os valores dos dados, sempre que esses eventos ou acções

tenham dados associados. Para além desses, inclui ainda a transição , que corresponde

à terminação com sucesso de uma operação (processo na linguagem da álgebra de

processos). A sintaxe utilizada para representar a transição do exemplo do parágrafo

anterior é :corrente próximo

5.5.2. Operadores

Para a especificação do comportamento das aplicações são utilizados um conjunto

de operadores. Em seguida apresentam-se os operadores definidos nesta dissertação, e

uma descrição não exaustiva da sua semântica. Os parêntesis rectos são utilizados na

definição das operações para declarar as partes opcionais da declaração.

5.5.2.1. Operação de Entrada

A ? µ [(var1 [... , varn])]

As operações de entrada são semelhantes aos processos primitivos de entrada do

CSP. A expressão apresentada define a recepção do evento µ enviado pelo objecto

79

5.5.2.2. Operação de Saída

! µ ! µ [(exp1 [... , expn])]

As operações de saída são semelhantes aos processos primitivos de saída do CSP.

A expressão apresentada define a invocação da acção µ do objecto multimédia A, tendo

como parâmetros opcionais de entrada as expressões exp1 a expn, que devem ter um

tipo compatível com o tipo dos parâmetros respectivos do evento. O eventual retorno de

parâmetros é feito utilizando o envio de eventos para quem invoca a acção. Caso seja

necessário utilizar esses parâmetros, então deve ser executada uma operação de entrada

logo após a operação de saída.

5.5.2.3. Operação Atribuição

variável := expressãoA operação de atribuição define a atribuição do valor da expressão à

variável.

5.5.2.4. Operação Abort

ABORT

A operação ABORT aborta toda a especificação, e destrói todos os objectos

multimédia criados por ela.

5.5.2.5. Composição Sequencial

SEQB1 ; B2 [; B3 ; ... Bn] [;]

END

Esta operação define a composição sequencial dos operadores B1 até Bn, de

maneira semelhante à composição sequencial de processos em CSP. A semântica da

operação é definida por :

80

1 ; 2 [; 3 ; n ] [;]END

Este operador define a composição paralela entre operações. Nesta operação não

se seguiu o conjunto de processos que definem paralelismo em CSP, ou mesmo CCS,

pois o tipo de parametrização utilizado não é o mais adequado para definir o

comportamento de aplicações multimédia. Um exemplo de um processo que não tem

grande significado numa aplicação multimédia é o processo P ou Q não determinístico

(P Q em CSP). No caso presente o operador paralelo deve ser parametrizável em

termos de:

�• Semântica de terminação. A operação paralelo pode terminar quando todos os

operadores que o compõem terminarem, quando o primeiro terminar, ou quando a

disjunção ou conjunção de um subconjunto dos operadores terminar.

�• Influência entre os objectos. Os objectos enquanto activos podem trocar

informação sobre um certo estado, por exemplo velocidade ou geometria, de

forma a manter uma certa relação entre eles, por exemplo a mesma velocidade ou

geometria.

�• Vida dos objectos. Quando o operador paralelo termina, os objectos que

participaram nele podem ser todos mortos, ou podem continuar activos.

�• Duração dos objectos. Os objectos que participam num operador paralelo podem

manter a sua duração original, ficar todos com a duração do maior, do mais

pequeno, ou com uma duração dada.

�• Informação espacial. O operador pode definir uma relação hierárquica, nenhuma

relação, ou pode incluir informação de composição espacial, entre os objectos que

participam no operador paralelo e têm uma representação espacial.

81

j ; q ç q ( p )

entre o primeiro objecto que aparece na especificação do paralelo, e os restantes.

Relativamente à semântica de terminação foram definidas duas variantes: o

paralelo AND, que define o comportamento por defeito, em que o processo só termina

quando todos os operandos terminarem; e o paralelo OR, onde o processo termina

quando pelo menos um dos operandos terminar. Quando a operação tem dois

operandos, a semântica da condição de terminação é definida por :

�• PAR AND :B B e B B implica

PAR B B PAR B B1 1 2 2

1 2 1 2

' '; ' ; '

�• PAR OR :B B implica

PAR B B PAR B B1 1

1 2 1 2

'; ' ;

B B implicaPAR B B PAR B B

2 2

1 2 1 2

'; ; '

Os operadores PAR OR e PAR AND gozam da propriedade distributiva um em

relação ao outro, permitindo representar conjunções e disjunções de condições de

terminação arbitrariamente complexas.Relativamente à influência entre objectos foi definido o operador SYNC, que

define a gestão de um conjunto de estados a nível do paralelo, de modo a manter o

mesmo valor para as variáveis de estado. Por defeito, não é feita a sincronização de

nenhum estado a nível do paralelo.

Este parâmetro define a semântica da recepção de eventos dos objectos que

constituem o paralelo. Seja µ qualquer evento associado a um estado não sincronizado

ao nível do paralelo, e qualquer evento associado a um estado sincronizado. Se Pi

82

A composição paralela goza da propriedade associativa e comutativa (caso se

ignore a informação espacial). Observe-se que o conjunto de operadores SEQ, PAR OR

e PAR AND pode ser adaptado para descrever a sincronização de aplicações

multimédia de uma forma hierárquica, permitindo definir qualquer relação entre dois

intervalos [Hoepner 91].

5.5.2.7. Composição Alternativa

ALTB1 ; B2 [; B3; ... Bn ] [;]

END

A composição alternativa suporta a definição de um conjunto de apresentações

alternativas, controladas pela recepção de eventos.

A semântica da operação com dois operandos B1 e B2, duas expressões com

guardas (ou seja, onde a primeira instrução executada é uma entrada), é:B B implica ALT B B B1 1 1 2 1µ µ' ; 'B B implica ALT B B B2 2 1 2 2µ µ' ; '

Esta operação goza da propriedade associativa.

5.5.2.8. Execução Condicional

IF condição THEN A [;] ELSE B

IF condição THEN A

A execução condicional de expressões faz depender a activação de uma

expressão, do valor de condição, uma expressão booleana. A condição alternativa

ELSE é opcional.

A semântica associada ao operador é :

83

5.5.2.9. Execução Repetitiva

WHILE condição DOB

A execução repetitiva de operações é suportada pela operação WHILE, que

executa a operação B enquanto a expressão booleana condição tiver o valor

verdadeiro. A expressão anterior é equivalente à expressão recursiva:B := IF boolean_expression THEN B

A semântica deste operador é idêntica à semântica do operador equivalente em

CSP : condição * p1.

5.5.2.10. Activação de Objectos Multimédia

A declaração da activação de objectos multimédia pode ser feita directamente

através da activação de acções. No entanto, para facilitar a programação foram

definidas algumas simplificações sintácticas. Um objecto, ou um intervalo de um

objecto, pode ser activado indicando apenas o seu nome, que deve ser declarado

previamente. O processo mantém-se activo até a apresentação do objecto terminar. Por

exemplo, a activação do objecto viagem e do intervalo Primeira_parte

declarados na figura 5.5, seriam convertidos em:

�• viagem :SEQ viagem ! Play(Ev_Start, Ev_End); viagem ? Ev_End;END

�• Primeira_parte :SEQ viagem ! Play(Ev_Start, <Label,ChegadaLondres>); viagem ? <Label, ChegadaLondres>;END

84

ç j p p g ç

da especificação ou processo. A recepção de eventos dos objectos compostos é

substituída pela recepção dos eventos correspondentes definida na secção

listaEventos da declaração das especificações ou processos.

5.5.3. Exemplo

A figura 5.6 apresenta um exemplo de uma especificação do comportamento de

uma especificação. Na secção de declarações, não apresentada, estava a declaração do

objecto multimédia Video, com dois intervalos Video1 e Video2, e a declaração

dos objectos multimédia Audio1, Audio2 e Audio3.

PAR SYNC (speed) // Gestão do estado velocidade no paralelo SEQ

PAR OR Video1; Audio1; SEQ /* Composição baseada em eventos */

Video?Ev_ClickAudio3;

END;END;PAR /* Composição hierarquica */ Video2; Audio2;END;

END;END

Figura 5.6: Exemplo de uma especificação de comportamento.

No exemplo são ilustrados dois tipos de composição: Sincronização baseada em

eventos não determinísticos, em que se usa uma composição baseada na recepção

explícita de eventos, no caso do exemplo, para activar a apresentação do objecto

85

,

O exemplo anterior permite ainda observar a importância das verificações

semânticas no compilador. Caso se substituísse o operador PAR OR por PAR AND

teríamos uma especificação que poderia ficar bloqueada se o intervalo Video1

terminasse, sem o utilizador ter premido o botão do rato sobre o vídeo. A solução

referida no início da secção 5.5, de ter a declaração separada em parte determinística e

não determinística, impedia a existência desse problema, mas também complicava

significativamente a definição de uma apresentação com a funcionalidade especificada

no exemplo.

CAPÍTULO 6.IMPLEMENTAÇÃO

Neste capítulo começa-se por descrever o ambiente de desenvolvimento sobre o

qual o sistema foi implementado. Depois, descreve-se sucessivamente a forma como os

objectos multimédia, o interpretador e o compilador foram realizados, descrevendo-se

sucintamente as estruturas de dados e os algoritmos utilizados. No fim, comenta-se a

compatibilidade do sistema desenvolvido em relação às normas apresentadas no

capítulo dois, e comenta-se algumas das limitações do sistema.

86

6.1.1. ANSAware

O ANSAware é uma implementação da arquitectura ANSA (Advanced Networked

Systems Architecture), que segue muito perto o trabalho de normalização em sistemas

de processamento distribuído abertos (ODP). Tal como o modelo de referência para

processamento em sistemas distribuídos abertos (RM-ODP) [ISO 93], o ANSA é

constituído pela conjunção de diferentes pontos de vista (viewpoints) sobre um sistema.

Os mais relevantes para esta dissertação são o ponto de vista computacional, que

especifica a funcionalidade da aplicação a partir da interacção entre objectos, o ponto de

vista de engenharia, que especifica os algoritmos para se conseguir essa interacção, e o

ponto de vista tecnológico, que especifica como os algoritmos anteriores são de facto

implementados sobre o hardware e o software existente.

Modelo computacional

O modelo computacional define uma interacção tipo cliente-servidor entre

objectos. Os objectos encapsulam dados e processamento, e oferecem interfaces para a

interacção com outros objectos, podendo oferecer vários interfaces. Cada interface é

composto por zero ou mais operações.

O ANSA define um conjunto de transparências destinadas a mascarar aspectos

particulares da complexidade da programação distribuída. O ANSAware implementa

quatro dessas transparências: a transparência de acesso, que permite um acesso

uniforme independentemente do objecto ser local ou remoto, e é garantida através da

definição de referências genéricas para interfaces; a transparência de localização, que

permite o acesso aos objectos sem conhecimento da sua localização, e é realizada

utilizando o Trader, um servidor de nomes; a transparência de replicação, que

permite que múltiplas instâncias de um interface sejam vistas como um único, e é

87

, g g ,

transmitTimeout, que resulta de situações de sobrecarga ou terminação de um

servidor.

Na figura 6.1 é apresentado um exemplo, com um servidor B que oferece três

interfaces, e um cliente A, que acede aos serviços da interface If1. Embora o

comportamento por defeito seja a cápsula onde A está a correr terminar quando ocorrer

uma excepção, é possível "apanhar" essas excepções, criando um sistema robusto de

acesso a funções remotas.

If1

If2

If3

A BFigura 6.1 : Modelo computacional do

ANSAware

Os objectos podem obter as referências para os interfaces, passando-as de uns

para os outros, ou através do Trader.

O Trader tem uma funcionalidade semelhante ao gestor de nomes, descrito na

secção 4.6.3: mantém uma base de dados com os interfaces dos servidores activos

existentes no sistema. Em ANSAware a interacção com o Trader é feita utilizando o

esquema representado na figura 6.2. O servidor exporta a referência para o interface

através da operação Export do Trader, que associa um tipo ao interface, e permite

associar um conjunto de propriedades opcionais. O cliente obtém no Trader a referência

para o interface do tipo de serviço que quer aceder através da operação Import. Nesta

operação podem-se impor condições na pesquisa referentes às propriedades com que os

interfaces foram registados, como seleccionar o interface mais recente, ou com o valor

88

Cliente Servidor

IfServIfClient

O ANSA é uma arquitectura fortemente tipificada, sendo utilizados tipos em

diferentes aspectos do modelo computacional. Os interfaces são descritos por tipos,

podendo-se definir relações de subtipo entre os tipos de interfaces, com herança de

protótipos das funções, ou de implementação, não permitindo no entanto, a redefinição

da implementação de funções. O tipo de invocação, com ou sem resposta, também é

categorizado com tipos. Como foi visto, o Trader também guarda os registos

organizados num espaço de tipos.

Modelo de engenharia

O modelo de engenharia suporta o modelo de computação sobre uma variedade de

modelos tecnológicos. São definidos um conjunto de conceitos de baixo nível, como o

núcleo (nucleus) e a cápsula (capsule). O núcleo é a entidade que gere os recursos

específicos dos computadores e constrói sobre eles o ambiente de computação

distribuído que é uniforme no sistema. As cápsulas correspondem aos executáveis que o

programador especifica e corre, e são constituídas por uma colecção de zero ou mais

objectos computacionais compilados. O núcleo fornece às cápsulas um ambiente

multitarefa não preemptivo, onde existem vários processos (threads) que correm

quando são atribuídos a processadores (tasks). As tasks dão o contexto para

processamento independente e podem haver tantas tasks e threads por task quantas se

queiram.

89

UDP TCPIPC

A arquitectura de uma cápsula ANSA está representada na figura 6.3. A

comunicação é definida em três níveis :

O nível mais baixo, proporciona o serviço de transporte, sendo suportados o UDP,

TCP e IPC por named pipes do Unix. A selecção do protocolo a utilizar é feito

transparentemente pelo sistema, durante a invocação de uma operação de uma interface.

A referência da interface contém informação suficiente para o sistema fazer o

emparelhamento de protocolos comuns.

O nível intermédio proporciona a semântica de interacção, e usa chamadas de

procedimento remotas (RPC). Estão definidos dois protocolos: o REX (Remote

EXecution protocol), baseado em [Birrel+ 84], suporta associações ponto a ponto, com

vários tipos de interacção (síncrona, não fiável, assíncrona); o GEX (Group EXecution

protocol) suporta o envio de multicast. Na versão de ANSAware utilizada, o GEX não é

um protocolo independente, mas utiliza os serviços do REX para enviar as mensagem

para vários destinos.

O nível superior de comunicação, o interpretador, é o serviço de sessão e

proporciona as estruturas de diálogo e sincronização. O interpretador fornece agentes

para a comunicação entre cápsulas, que podem ser: Plugs (fichas), para clientes, que

permitem aceder a interfaces remotas; e Sockets (tomadas), para servidores, que

definem os pontos de endereçamento de um interface. Os plugs suportam as operações:

call, um RPC síncrono onde a thread do cliente bloqueia enquanto o pedido está a ser

processado no servidor (figura 6.4); cast, um RPC sem resposta, sem garantias de

recepção do pedido (figura 6.5); request e collect, que iniciam e finalizam um

90

call proc.

Figura 6.4: RPC síncrono.

proc.

Figura 6.5: RPC semresposta.

proc.

collect

Figura 6.6: RPC assíncrono.

No nível superior da arquitectura da cápsula ANSAware, os objectos

computacionais compilados, interagem através dos sockets e dos plugs, utilizando

rotinas de serialização (marshalling) para codificar os parâmetros.

6.1.2. Suporte do modelo de comunicação.

O ANSAware foi seleccionado para a realização do sistema de desenvolvimento

de aplicações multimédia distribuídas porque:

�• oferece um interface para os objectos compatível com o definido nesta

dissertação.

�• permite o suporte de paralelismo interno aos processos (cápsulas), que é

necessário para o desenvolvimento de objectos activos.

�• oferece uma infra-estrutura de comunicação potente e integrada no

processamento geral através de excepções.

�• inclui um servidor de nomes.

�• suporta um contexto de tipos com verificação durante a compilação e durante a

execução das invocações de operações nas interfaces.

Por outro lado, permite que o sistema desenvolvido possa ser portado com um

esforço mínimo para o conjunto de sistemas operativos suportados pelo ANSAware,

91

ç , ç j

componentes distintas: a invocação de acções; a geração de eventos; e a transferência de

fluxos de dados multimédia.

A invocação de acções corresponde a uma invocação fiável de um método de um

objecto, prescindindo-se do retorno da chamada à aplicação por não haver parâmetros

de retorno. No ANSAware, o tipo de invocação que oferece a semântica de passagem

de mensagens, sem resposta, é o tipo cast. No entanto, não existe qualquer tipo de

controlo de erro ou fluxo, tendo de ser feito externamente. Assim, optou-se por utilizar

invocações do tipo call, que embora tenham uma semântica RPC (Remote Procedure

Call), permitem simular a semântica desejada, desde que o tempo de processamento das

operações seja reduzido. Para garantir que esta condição é verificada, nos casos onde a

operação bloquearia, (como por exemplo, a operação Play), a acção limita-se a criar

uma thread que corre a operação pretendida, e a retornar.

A geração de eventos corresponde a uma invocação fiável do método

ReceiveEvent sobre um grupo de interfaces. Aparentemente, a realização mais

simples seria utilizando invocações do tipo call sobre o protocolo GEX. No entanto,

no ANSAware versão 4.1, a utilização de interfaces de grupo ainda não está optimizada,

existindo um conjunto de limitações à sua utilização, que complicariam a realização do

sistema. Assim, optou-se pela utilização de RPCs assíncronos sobre REX para a sua

realização. O envio de um evento é iniciado pelo envio da invocação para todos os

destinos, seguindo-se depois a espera da resposta de todos os destinos.

Comparativamente à utilização do GEX, a principal desvantagem vai ser em relação às

rotinas de serialização, que vão ser chamadas para todas as invocações, em vez de ser

chamadas só uma vez. Caso se tivesse utilizado o GEX, as invocações sobre os

92

p , ;

utilizavam sockets Unix externamente ao ANSAware e se integravam no sistema,

utilizando o interface que o ANSAware oferece para esse efeito. No sistema

desenvolvido nesta dissertação, optou-se por utilizar operações RPC para transferir

esses dados, deixando para uma fase posterior, o desenvolvimento de componentes que

suportem a transferência de dados multimédia através de interfaces dedicados para o

efeito. Nessa fase, já será possível utilizar uma rede experimental ATM, que entretanto

ficou disponível no projecto, mas só na fase final do desenvolvimento do sistema.

6.1.3. Análise do desempenho

Nesta secção apresentam-se os resultados de testes de desempenho da invocação

de funções em interfaces ANSAware. Cada teste foi efectuado para invocações locais,

utilizando IPC, e para invocações remotas, utilizando uma rede Ethernet, e uma rede

ATM que funciona a 100 Mbit/s. As máquinas usadas foram duas SUN SPARCstation

10, uma com um processador, e a outra com dois processadores.

No primeiro teste efectuado, utilizaram-se RPCs síncronos, e testou-se a

dependência do tempo de transmissão de uma invocação em função do número de

octetos enviados, para os três tipos de invocação, tendo-se obtido os resultados

apresentados na tabela 6.1.

Comprimento 0 50 100 200 400 800 1600 3850 8000 16000 32000ATM 3.00 3.08 3.12 3.24 3.46 3.87 5.09 9.99 20.01 49.99 100.05Ethernet 3.00 3.09 3.13 3.24 3.46 3.87 5.18 9.99 20.04 50.00 100.06IPC 2.10 2.22 2.23 2.24 2.27 2.34 2.81 3.65 19.99 40.01 80.15

Tabela 6.1: Tempos de transmissão [ms] em função do comprimentoda mensagem.

93

p ç p , p p

significativo da rede ATM para a gama de valores testados, com o protocolo

REX/UDP.

Observando a figura 6.7, verifica-se que a evolução do tempo de atraso não é

linear. Para ATM apresenta um crescimento lento até cerca dos 1600 octetos, tendo a

partir daí, um crescimento aproximadamente linear. Para IPC apresenta um crescimento

lento até cerca de 3850 octetos, tendo um crescimento brusco perto dos 4000 octetos, e

apresentando uma variação aproximadamente linear a partir daí, com tempos próximos

dos obtidos com ATM.

A existência de um ponto de variação brusca nas comunicações locais pode ser

explicada pelo facto de serem utilizados named pipes do Unix, que têm uma memória

associada de 4 Koctetos, passando a partir daí a haver comutações de processos

adicionais, que vão afectar significativamente o desempenho, provocando um

desempenho praticamente igual à invocação remota para 8 Koctetos.

Nº Octetos

1

10

100

10 100 1000 10000 100000

ATM IPC

Figura 6.7: Tempos de transmissão [ms] emfunção do comprimento, para ATMe IPC.

Atendendo à evolução descrita anteriormente, conclui-se que o desempenho na

transferência de fluxos de informação utilizando invocação de funções é máximo,

quando se utilizam pacotes de dimensão até aos 3850 octetos. No entanto, é de admitir

que esse desempenho está longe do máximo que poderia ser obtido, caso se recorresse a

94

g p q q

testados, e que está associado principalmente às rotinas de serialização (marshalling).

No segundo teste efectuado, testou-se a dependência do tempo de transmissão em

função do número de interfaces invocados em paralelo, quando se utilizam RPCs

assíncronos. Foi testado o envio em paralelo de RPCs nulos para interfaces na mesma

cápsula, e em cápsulas diferentes, tendo-se obtido os resultados apresentados

respectivamente nas tabelas 6.2 e 6.3.

Nº destinos 1 2 3 4 5 6 7 8 9ATM 3.00 4.59 5.40 6.98 8.61 10.33 12.21 14.15 15.50Ethernet 3.00 4.61 5.40 7.02 8.67 10.38 12.25 14.19 15.50IPC 2.10 3.07 4.16 4.97 5.45 6.02 6.88 7.93 8.90

Tabela 6.2: Tempos de transmissão [ms] em função do número dedestinos invocados em paralelo no mesmo servidor.

Nº destinos 1 2 3 4 5ATM 3.00 4.61 5.74 7.94 10.18Ethernet 3.00 4.64 5.92 8.49 10.69IPC 2.10 3.22 4.75 6.30 7.87

Tabela 6.3: Tempos de transmissão [ms] em função do número dedestinos invocados em paralelo em servidoresdiferentes.

A primeira verificação é que os ganhos de performance pela utilização de RPCs

assíncronos em paralelo em relação à utilização de RPCs síncronos sequenciais são

significativos. Utilizando a regressão linear obtêm-se coeficientes de correlação

superiores a 0.99, com valores de (0.99+1.77n) e (1.00+1.59n) para ATM, e

95

q ç p q

em cápsulas (processos) diferentes, devido essencialmente à menor necessidade de

comutação de processos.

Nº Destinos

02468

1012

1 2 3 4 5

1 cápsula n cápsulas

Figura 6.8: Tempos de transmissão [ms] emfunção do número de destinospara ATM com servidores namesma cápsula e em cápsulasdiferentes.

Nº Destinos

0

2

4

6

8

1 2 3 4 5

1 cápsula n cápsulas

Figura 6.9: Tempos de transmissão [ms] emfunção do número de destinospara IPC com servidores namesma cápsula e em cápsulasdiferentes.

Observando o conjunto de resultados obtidos, verifica-se que os valores do tempo

de transmissão vão variar significativamente com o número de interfaces, podendo

atingir valores não desprezáveis com "multicasts" para um número de interfaces

superior a 5, que podem dar origem a alguns problemas do tipo dos descritos na secção

3.4 (por exemplo, recepção de mensagens não atómica ou fora da ordem causal). No

entanto, nesta dissertação o problema não foi resolvido por falta de tempo, sendo esta

uma das suas limitações. Para resolver este problema, poder-se-ia utilizar qualquer

96

Nesta dissertação foi implementado um conjunto de objectos multimédia com

características diferentes, de modo a permitir testar o sistema. Foram realizados

objectos cujos dados multimédia têm uma natureza isócrona (objectos de Vídeo e de

Áudio), e objectos sem essa natureza, que são usados sobretudo em composições de

hipertexto, (objectos de Diapositivos e de Texto). Para permitir a definição de relações

temporais fixas entre a activação dos objectos, foi implementado um objecto de

Relógio.

Na tabela 6.4 são apresentados os tipos de objectos multimédia implementados, os

estados suportados por cada um, e os tipos de componentes que foram desenvolvidos

para os realizar.

ObjectoMultimédia Estados Suportados Fontes Destinos

Vídeo Contexto Anotação mpegSource mpegSinkVelocidade Pausa

ClickDiapositivos Contexto Anotação imagSource imagSink

Click VelocidadePausa

Texto Contexto Anotação text scrolledwindowClick

Audio Contexto Anotação soundVelocidade Pausa

Relógio Contexto Anotação timerVelocidade Pausa

Tabela 6.4: Os tipos de objectos multimédia e de componentesimplementados, e os estados associados.

97

( ), p ( , , ), p, p, p,

CMU WM Raster, FBM Image, McIDAS areafile e Faces Project. Estes objectos

funcionam em dois modos: se for fornecida uma lista de nomes na propriedade

FILENAME, então mostram um conjunto de imagens em sequência; senão, mostram

apenas uma imagem. O tempo de apresentação de uma imagem pode ser infinito, nunca

sendo gerados os eventos de fim de objecto sem intervenção directa do utilizador; ou

então, limitado pelo valor especificado para a propriedade IMAGE$TIME, que

determina o tempo de duração da apresentação de cada imagem. Para implementar estes

objectos foram desenvolvidos dois servidores de componentes, que gerem todas as

fontes e destinos para a máquina onde estão a correr.

Os objectos de Vídeo também foram realizados sobre X Windows, tendo sido

utilizadas algumas rotinas do software (freeware) MPEG Video Software

Decoder versão 2.0 [Patel+ 93], que fazem a descodificação do formato MPEG

[ISO 11172]. De entre os objectos realizados, os objectos de vídeo são os mais pesados

em termos de processamento, sendo utilizada uma cápsula (processo Unix) por cada

objecto componente destino, pois a concorrência interna às cápsulas não é suficiente

para garantir a qualidade mínima de apresentação. Os dados são trocados entre a fonte e

o destino no formato MPEG, de modo a minimizar a quantidade de informação

transmitida. O valor inicial do número de imagens apresentadas por segundo é definido

na criação do objecto pelo valor da propriedade FRAME$RATE, podendo depois ser

modificado dinamicamente através do interface do estado Velocidade. Caso não seja

possível obter o ritmo especificado, são saltadas imagens, poupando-se no tempo de

98

p [ ],

estrutura semelhante aos objectos de imagem. O seu funcionamento é controlado pela

propriedade mode, que por defeito tem o valor "allfile", não sendo gerados os eventos

de fim de apresentação, excepto por ordens explícitas na interface de controlo.

O objecto de áudio foi implementado sobre os serviços do AudioFile

[Levergood+ 93]. O AudioFile permite que múltiplos clientes comuniquem com

servidores de som partilhando o acesso aos dispositivos de som de uma forma

semelhante à utilizada pelo X Windows, sendo fornecida uma biblioteca de funções e

um interface de programação de aplicações que permitem a construção de clientes.

O objecto de Relógio permite dois tipos de funcionamento, conforme o valor da

propriedade PERIODIC. Quando funciona no modo intervalo de tempo, gera um

evento isolado ao fim de um número de segundos, ou num instante de tempo pré-

definido, conforme o tipo de anotação utilizado na chamada à função Play (GMTime

para um instante de tempo fixo). Quando funciona no modo cíclico, gera um evento

com uma periodicidade definida pela propriedade TIMEOUT em milisegundos,

podendo-se modificar a escala de tempo através do interface do estado velocidade.

Em relação ao controlo da transferência dos dados das fontes para os destinos,

foram utilizadas duas soluções distintas. Nos objectos de som e imagem, o envio dos

dados é controlado pelas fontes, enquanto no objecto de vídeo, o envio dos dados é

controlado pelo destino. Em qualquer dos casos, foram utilizados RPCs ANSAware,

sobre um interface independente dos interfaces de controlo, de modo a permitir uma

posterior substituição por um mecanismo mais eficiente de comunicação. Para os

3numa primeira fase são saltadas tramas tipo B, numa segunda fase tramas tipo P, e só em último

caso tramas tipo I.

99

ç ç

controlo. No entanto, quando se utiliza um protocolo stream, tem-se uma situação

semelhante à de ter o controlo de envio na fonte, tornando assim esta solução desejável

no sentido de permitir uma adaptação futura mais fácil.

6.2.1. Constituição dos Objectos Multimédia e Componentes

A implementação dos objectos multimédia e componentes seguiu o esquema

descrito nas secções 4.4 e 4.5.

Para cada tipo de objecto componente multimédia existe pelo menos um servidor

no sistema, podendo existir um por cada máquina. Cada servidor de componentes

exporta o interface do seu estado VidaComponente para o gestor de nomes, com o

nome do componente, indicado na tabela 6.4. As instâncias dos componentes criados

num servidor correm na mesma cápsula (processo Unix) onde foram criados,

exceptuando os casos onde o paralelismo oferecido pelas threads não seja

suficientemente poderoso, como por exemplo nos componentes destino de MPEG, que

correm em processos separados.

Os objectos multimédia têm apenas um tipo de servidores, que pode gerir qualquer

tipo de objecto multimédia. No sistema deve haver pelo menos um servidor de objectos

multimédia, podendo existir um por cada máquina. Cada servidor de objectos multimédia

exporta o interface Vida para o servidor de nomes com o nome "Vida". Para cada nova

instância de objecto multimédia, o servidor cria as instâncias dos objectos componentes

que o compõem, e gere o estabelecimento das ligações entre os seus portos, mantendo

um descritor interno, que pode incluir uma máquina de estados associada ao objecto. O

estado Contexto do objecto multimédia é gerido localmente na cápsula do servidor

100

p q p j , g g

conclui a invocação, e são retornadas as respostas para quem invocou a operação,

sempre que tal é necessário. No caso das operações Play e Stop é utilizado um

semáforo ANSA, para garantir que as duas operações não correm em paralelo para um

mesmo objecto. A acção receiveEvent é a única que não é processada pelos

componentes, mas sim pelo interpretador interno aos objectos multimédia (controlador)

que corre uma máquina de estados. Caso o controlador não esteja activo, a acção é

ignorada.

Na figura 6.10 apresentam-se os passos executados durante a construção de um

novo objecto multimédia.

Server imagsrc

imagsnk

Objecto multimédia

Gestor de Nomes

Máquina

de

Estados

1

2

3

4

56

4

Figura 6.10: Criação de um objecto multimédia de Diapositivos.

A criação de objectos multimédia é feita a partir de interpretadores que correm

máquinas de estados. Os interpretadores começam por consultar o gestor de nomes (1)

101

, q g p j ç p

aceder ao gestor de nomes (3) para obter referências para os servidores dos

componentes necessários à construção do novo objecto. Em seguida, o servidor de

objectos invoca a acção Prepare do estado VidaComponentes sobre todos

servidores de componentes (4), obtendo as referências para os componentes criados, e

para os portos de cada um. No passo seguinte (5), invoca a acção Connect do estado

Porto sobre todos os portos que foram especificados nos parâmetros da invocação (2),

sendo estabelecidas todas as ligações de dados multimédia. Caso tenha sido especificada

a propriedade SELFCONTROLLED nesses parâmetros, com um nome de um ficheiro

com uma máquina de estados válida, então é criado um controlador interno ao objecto

multimédia (secção 4.5), existindo uma fase (6) onde o controlador carrega a máquina

de estados. A partir do momento em que arranca, o controlador passa a correr como

qualquer outro interpretador no sistema. Por fim, é retornado o interface do estado

Contexto do novo objecto para o interpretador que criou o objecto.

Por exemplo, no caso representado na figura 6.10, seria criado um objecto de

diapositivos, que teria três componentes a correrem em três cápsulas distintas. Este

objecto apresenta externamente cinco interfaces, tal como tinha sido indicado na tabela

6.4. Internamente, os estados estão distribuídos pelos três componentes. O componente

fonte (cápsula imagsrc) é o responsável pelo controlo do envio dos dados, assim

controla os estados Anotação, Velocidade e Pausa. O componente destino

(cápsula imagsnk) é o responsável pela apresentação das imagens no écran,

controlando o estado Click. O dispatcher e eventualmente o controlador (ambos na

cápsula Server) são responsáveis pelo estado Contexto do objecto.

102

6.3.1. Linguagem

A solução mais comum na literatura para a compilação de álgebras de processos,

é a de transformar as especificações em máquinas de estados convencionais [Karjoth

88], ou em código C que as realiza [Cardelli+ 85]. Nessas máquinas de estados, define-

se um conjunto de estados possíveis e as transições disponíveis para cada estado, só

podendo estar um estado activo em cada instante. No entanto, esta transformação não é

a mais apropriada para representar o paralelo entre processos, pois gera um espaço de

estados que é o resultado do produto cartesiano dos espaços de estados envolvidos em

cada ramo do paralelo, originando um crescimento explosivo do número de estados em

função do número de eventos de entrada na máquina de estados. Assim, optou-se por

representar directamente a álgebra de processos implementando a sua semântica e

criando um sistema onde o estado global é definido pelo número de processos activos

num dado instante. A introdução de uma composição paralela não cria novos estados,

mas apenas acrescenta mais processos à definição do estado.

O resultado final pode ser visto como uma máquina de estados definida por uma

álgebra de processos, que é traduzida durante a execução do interpretador para uma

máquina de estados tradicional, pois o interpretador só vai processar uma transição de

cada vez.

A estrutura da declaração das máquinas de estados é semelhante à definida para a

especificação de aplicações multimédia, seguindo a estrutura apresentada na figura

6.11.

103

Uma máquina de estados é identificada por um nome, NomeMáqEstados, que a

identifica univocamente. As restantes secções do cabeçalho definem a interface externa

da máquina de estados. A secção listaEventos serve para declarar a visibilidade

exterior de estados, eventos e acções, permitindo definir quais os que são processados

na máquina de estados. A secção listaParâmetros contém uma lista com os

identificadores dos objectos inicializados por outros interpretadores, que são utilizados

no código da máquina de estados.

A secção DeclaraçãoObjectosMM contém a lista de todos os objectos que

vão ser criados no âmbito da máquina de estados local, contendo todos os parâmetros

que são utilizados durante a invocação da acção Prepare. O modo como os dados são

dispostos foi optimizado, de modo a simplificar a gestão de memória no interpretador,

passando as listas a ter como primeiro parâmetro o número de elementos da lista.

A secção DeclaraçãoVariáveis define variáveis para posterior utilização,

associando um tipo e eventualmente um valor inicial a cada variável.

A secção DefiniçãoInicializações contém uma lista de inicializações

para os vários objectos utilizados na especificação. Cada elemento da lista refere-se a

um objecto, e contém a lista de interfaces de estados que deve ser obtida com a acção

Inform (precedida da palavra chave STATUS), e a lista de estados onde deve ser

registado o interesse em receber eventos com a acção RegisterStatusInterest

(precedida da palavra chave REGISTER).

Em relação à secção ExpressõesComportamento, ela define a máquina de

estados propriamente dita, utilizando uma sintaxe e semântica semelhantes às

apresentadas no capítulo cinco desta dissertação, para a linguagem de definição de

aplicações multimédia. As diferenças fundamentais residem na não existência de

104

de objectos multimédia, e para a troca de referências para interfaces de objectos

multimédia.

O primeiro tipo de interacção, representado na figura 6.12, suporta a criação de

um novo objecto multimédia, e posteriormente, a inicialização das referências para

objectos multimédia, a partir do criador do objecto. Neste tipo de interacção são

utilizadas três operações:

�• PREPARE, invoca a acção Prepare sobre o estado Vida do servidor de

objectos multimédia, criando um novo objecto. Ao retornar, deixa o interface do

objecto criado inicializado a nível da máquina de estados onde a operação foi corrida.

�• INIT, é utilizada para inicializar a referência para um objecto. Esta operação

bloqueia o processo até que se receba uma acção Bind sobre o estado Remctrl

(descrito na secção 4.3.3, página 56) que contenha o interface do objecto pretendido.

�• BIND, é utilizada para fornecer referências para objectos a outras máquinas de

estados. Provoca a invocação da acção Bind sobre o estado Remctrl do controlador

do objecto destino. Caso o objecto destino não suporte esse estado (não tenha o

controlador activado), é gerado um erro de execução.

O segundo tipo de interacção, representado na figura 6.13, permite suportar a

troca de referências para interfaces de objectos entre quaisquer interpretadores,

utilizando o gestor de nomes. Neste tipo de interacção são utilizadas duas operações:

�• EXPORT, exporta um interface conhecido na máquina de estados para o gestor

de nomes, associando-lhe um nome chave.

�• IMPORT, importa um interface do gestor de nomes, pesquisando o registo

mais recente de um nome chave. Caso a primeira pesquisa falhe, a operação bloqueia o

processo, e entra num ciclo onde adormece e torna a fazer a pesquisa ao gestor de

nomes. A operação só é concluída quando a pesquisa for bem sucedida.

105

Figura 6.12: Operações utilizadas durante acriação de objectos e inicializaçãode referências do novo objecto.

Figura 6.13: Operações usadas entremáquinas de estadosconcorrentes.

6.3.2. Interpretadores

Os interpretadores são as entidades do sistema que são utilizadas para correr

máquinas de estados, e que podem existir internamente aos objectos multimédia,

chamando-se controladores, ou então externamente, como entidades activadoras de

aplicações multimédia.

Os interpretadores guardam as máquinas de estados internamente numa estrutura

em árvore, que é criada quando a máquina de estados é lida. A cada nó da árvore está

associada uma operação, sendo a estrutura da árvore definida pelas operações de

composição (SEQ, PAR, ALT, IF e WHILE), que constituem os nós intermédios da

árvore. As folhas da árvore contêm todas as restantes operações, que dão origem a

processamento.

Por exemplo, para a máquina de estados cuja secção

ExpressõesComportamento fosse a representada na figura 6.14, seria criada a

estrutura de dados representada na figura 6.15. Observa-se que as duas operações de

composição deram origem a dois nós intermédios na árvore, que têm como ramos uma

lista duplamente ligada de nós, que correspondem aos parâmetros dos operadores de

composição.

PAR OR

106

Objecto?Ev_End

Objecto?Ev_Click

Objecto!PLAY

SEQ

PAR OR

Inic io

1

3

2

4

5

Figura 6.15: Arquitectura de nós criada a partir do exemplo da figura6.14.

Para facilitar a movimentação na árvore, cada nó tem sempre um ponteiro para o

nó que o precede hierarquicamente, excepto o nó raiz, onde esse ponteiro vale NULL.

A raiz é apontada por um ponteiro Inicio que existe no sistema.

Como o interpretador corre em apenas um processo Unix, não é possível ter

paralelismo na execução de operadores, não sendo directamente realizável a semântica

definida para a linguagem de especificação da máquina de estados. Desta forma, só se

executa uma transição de cada vez na máquina de estados, e de forma atómica. No

entanto, algumas operações podem bloquear, como a operação de entrada (recepção de

eventos). Assim, é necessário associar um estado a cada nó, que indica se a operação

que lá está representada já correu, está bloqueada à espera de ser concluída, ou

eventualmente, se houve um erro. Cada nó pode estar num de quatro estados possíveis:

�• IDLE_EXPR, é o valor com que os nós são inicializados, e significa que a

expressão ainda não foi corrida.

�• RUN_EXPR, significa que a expressão foi activada, mas ainda não terminou.

�• END_EXPR, significa que a expressão já correu.

107

entrada (recepção de eventos), INIT e IMPORT, que implicam o bloqueio da operação

até que chegue o evento ou acção pretendido, ou que alguém registe o interface

pretendido no gestor de nomes. Para gerir estas operações, são organizadas filas de

espera para cada um dos tipos de acontecimentos, onde são guardadas estruturas que

contêm a descrição da informação pretendida, e um ponteiro para o nó onde a operação

foi invocada. Quando estas operações são executadas, o descritor do acontecimento (que

é criado durante a criação da árvore de nós) é colocado na fila de espera respectiva,

parando em seguida a execução do nó, que fica no estado RUN_EXPR. Só quando é

recebido o acontecimento pretendido, é que o nó é desbloqueado, passando ao estado

END_EXPR, continuando-se então a correr os nós da árvore, a partir do ponto onde

tinha sido interrompido. Nesta realização, os eventos são processados sequencialmente,

pela ordem porque são recebidos no interpretador.

Quando uma composição paralela é iniciada, tem de se iniciar um a um todos os

seus nós filhos. Poder-se-ia sortear a ordem pela qual a inicialização seria feita para

simular não determinismo, mas optou-se, por razões de eficiência e simplicidade, por

iniciar os processos sequencialmente pela ordem por que aparecem na descrição da

máquina de estados.

Vai-se agora reutilizar a máquina de estados da figura 6.14, que é guardada

internamente na estrutura representada na figura 6.15, para exemplificar como o

interpretador corre uma máquina de estados. Quando o interpretador é activado, começa

a percorrer os nós a partir da raiz da árvore, percorrendo sucessivamente o nó 1, 2, 3, 4

e 5. No fim, o processamento fica bloqueado, pois existem duas operações pendentes

nos nós 4 e 5, que ainda não concluíram as operações de entrada, e que fazem com que

os nós 1, 2, 4 e 5 fiquem no estado RUN_EXPR. A partir daqui a execução vai

depender de qual o evento que vai ser recebido primeiro. Se for recebido primeiro um

108

_ , p p ç , q p

cancelamento das operações pendentes no nó 2, e logo do nó 4, terminando em seguida

a execução da máquina de estados, pois o nó raiz atingiu o estado END_EXPR.

A versão desenvolvida nesta dissertação apresenta algumas limitações em relação

ao que seria necessário para suportar completamente, a linguagem definida no capítulo

cinco. A principal, é não suportar ainda variáveis partilhadas por várias máquinas de

estados.

6.3.2.1. Integração dos interpretadores nos executáveis

Nesta dissertação, os interpretadores podem ser utilizados tanto como processos

independentes em objectos interpretadores de máquinas de estados (secção 4.6.1), ou

em controladores, internos a objectos multimédia, podendo existir vários na mesma

cápsula. Optou-se por implementar uma estrutura modular com um interface bem

definido, que pode ser, assim, utilizado em ambos os casos.

Os interpretadores são definidos por descritores do tipo ControllerData, que

contêm todas as variáveis de estado, listas de espera, lista de variáveis e listas de

referências para as interfaces utilizadas. A integração do código de um interpretador

noutro executável é feito através de seis funções: load_script,

init_control_data, run_script, receive_Event, finish_script e

free_control_data.

A função load_script recebe como parâmetros um ponteiro para um descritor

de interpretador e o nome do ficheiro com a máquina de estados, e é utilizada para

carregar a máquina de estados, construindo a árvore de nós, e inicializando as variáveis

do descritor respectivas.

A função init_control_data é chamada após a função load_script,

sendo utilizada para finalizar a inicialização do descritor do interpretador. Nesta função

109

p ç , ç q p , p ç

Retorna TRUE caso não tenha chegado ao fim da especificação, tendo ficado alguma

operação pendente. Senão, se houve algum erro durante a execução, ou se terminou a

execução da máquina de estados, retorna FALSE.

A função receive_Event deve ser chamada após a recepção de uma

invocação da função ReceiveEvent no interface Contexto associado ao

interpretador. Assim, é utilizada para continuar o execução da máquina de estados a

partir do ponto onde tinha ficado interrompida.

As funções finish_script e free_control_data são usadas

respectivamente para interromper a execução de uma máquina de estados, e para

destruir um descritor de interpretador, libertando a memória ocupada.

6.4. COMPILADOR

O compilador mmcompiler é o elemento do sistema de desenvolvimento de

aplicações multimédia, que se destina a transformar especificações de aplicações

multimédia (scripts) escritas na linguagem definida no capítulo cinco, em máquinas de

estado, descritas utilizando a linguagem introduzida na secção 6.3 deste capítulo.

Um dos objectivos desta dissertação foi desenvolver um sistema de geração

automática de máquinas de estados para a realização de controlo distribuído, a partir de

especificações textuais. Embora o interpretador desenvolvido seja genérico, e permita a

utilização de uma arquitectura de controlo misto, com características centralizadas ou

distribuídas, durante esta fase de desenvolvimento do compilador, optou-se por centrar

o trabalho apenas numa arquitectura de controlo distribuído, onde cada interpretador só

é utilizado para controlar um objecto multimédia. Evitou-se assim uma duplicação de

110

q p , p ç

inicialização das referências para os objectos, que em vez de ser feita com as operações

PREPARE, INIT e BIND, é feita através do gestor de nomes (Trader do ANSAware),

utilizando as operações EXPORT e IMPORT.

6.4.1. Algoritmo de Compilação

O algoritmo de compilação desenvolvido baseia-se na decomposição das

especificações num paralelo de sequências de operações independentes entre si, que

podem ser corridas em máquinas de estados diferentes. Como entrada aceita uma

especificação de uma aplicação, que compila, gerando um conjunto de máquinas de

estados.

As máquinas de estados geradas têm a estrutura representada na figura 6.16, que

define três secções: A primeira, inicializações, é utilizada para inicializar as

referências para os objectos multimédia; a segunda, expressões_em_loop, é

utilizada para gerir operações de controlo (em ciclo infinito), que podem ser geradas

durante a compilação das especificações; e a terceira, expressões_objectos,

contém o código encarregue de gerir a apresentação dos objectos multimédia.

SEQ inicializações PAR OR expressões_em_loop PAR

expressões_objectos END; END;END

Figura 6.16: Estrutura do código de uma máquina de estados geradapelo compilador.

111

p ç p ç p g p p ç ,

contém informação de sincronização suficiente para poder ser corrida em paralelo (PAR

AND) com todas as outras expressões que também foram geradas a partir da

especificação, e no conjunto, controlar uma parte da apresentação global. Caso se corra

o paralelo de todas as expressões, corre-se a aplicação definida na especificação.

Para se gerar um conjunto de máquinas de estados, que realizem o controlo

distribuído da aplicação, basta dividir as expressões por várias máquinas, podendo

depois ser feitas optimizações, de modo a simplificar a máquina de estados criada,

aproveitando as partes comuns no código das expressões em paralelo. Assim, este

método é genérico, no sentido em que permite gerar código para uma arquitectura de

controlo misto, podendo-se controlar a menor (ou maior) distribuição definindo grupos

de expressões maiores, que incluam expressões referentes a vários objectos.

Para se conseguir definir um algoritmo de conversão das especificações para um

paralelo de expressões, é necessário poder representar a condição de terminação de uma

dada expressão, que corresponde à transição na semântica da linguagem de

especificação. Assim, define-se código de terminação de uma expressão como a

composição de eventos que define univocamente o fim do processamento dessa

expressão, e representa-se por X para uma expressão X. O código de terminação vai

ser definido por expressões da linguagem que são função da recepção de eventos,

podendo ser uma expressão vazia, no caso em que uma dada expressão é instantânea do

ponto de vista de controlo, como por exemplo, no caso da invocação de uma acção.

O algoritmo desenvolvido funciona de uma forma recursiva, ou seja, começa a

construir o código compilado a partir das expressões básicas da especificação,

passando-o depois para os vários operadores de composição que envolvem essas

expressões.

112

SEQ objecto ! Play ( EventoInicio, EventoFim ) objecto ? EventoFimEND

Na expressão anterior, EventoInicio e EventoFim representam os eventos

que delimitam a apresentação que vai ser mostrada. No caso de intervalos, objecto

corresponde ao nome do objecto sobre o qual foi definido o intervalo. Caso a activação

de um objecto esteja dentro de um operador paralelo que está a fazer sincronização de

pelo menos um estado, então a expressão anterior é modificada, de acordo com o que

será descrito quando se apresentar o operador paralelo.

O código de terminação é definido pela expressão:objecto ? EventoFim

6.4.1.2. Operação de Saída

A operação de saída para objectos é compilada para uma expressão idêntica à

original, excepto que o nome da operação é substituído pelo código da operação.

Caso seja um intervalo, então é mais complexo. O algoritmo de codificação cria

uma variável auxiliar Booleana, varAux, com um nome gerado aleatoriamente, local à

máquina onde a expressão for utilizada, e que será gerida utilizando a expressão (que

será colocada na secção expressões_em_loop) :WHILE (TRUE) SEQ varAux:= FALSE;

objecto ? EventoInicio;varAux:= TRUE;objecto ? EventoFim;

END;

A operação de saída será então compilada para:IF varAux THEN objecto!Accção

Em qualquer dos casos, o código de terminação é vazio.

113

pSEQ objecto ? evento; WHILE (not varAux) DO objecto ? evento;END;

Em qualquer dos casos, o código de terminação é igual ao código após a

compilação.

6.4.1.4. Operação ABORT

A operação ABORT é compilada para a mesma operação. Ao contrário do código

gerado pelas expressões, as expressões de ABORT têm de ser incluídas em todas as

máquinas de estados geradas, de modo a garantir que todos os interpretadores utilizados

na aplicação possam abortar.

6.4.1.5. Composição Sequencial

A compilação de uma operação de composição sequencial baseia-se na

equivalência entre as duas expressões seguintes:SEQ A; B; END

PAR SEQ A ; B; END; SEQ A; B ; END;END

Assim, a compilação de uma composição sequencial consiste numa modificação

do código das expressões A e B, onde o código de B é substituído pela primeira

composição sequencial do lado direito da equivalência, e o código A é substituído pela

segunda. Caso a sequência não esteja dentro de um operador WHILE, pode ser utilizada

a simplificação de manter a expressão de A, não acrescentando B em sequência.

O código de terminação da sequência é obtido pela expressão:SEQ A ; B ; END

114

No entanto a compilação da composição paralela é mais complexa do que a

expressão sugere, pois é definida a parametrização do operador em função de muitos

mais aspectos.

Quando o operador paralelo termina, definiu-se que deveria destruir todos os

objectos que participaram nele, e ainda estão activos. A expressão anterior verifica esta

regra para a operação PAR AND, mas não para a operação PAR OR. Assim, foi

definida uma nova regra de compilação do PAR OR, para os casos onde uma expressão

A contém a activação de um objecto, designado por Aobj. Nesses casos, é utilizada a

regra de compilação apresentada a seguir, onde após ser detectada a condição de

terminação, é acrescentada uma chamada à acção Stop sobre o objecto invocado na

expressão:

PAR OR A; B; END

PAR PAR OR SEQ A ; Bobj!STOP; END; B; END; PAR OR SEQ B ; Aobj!STOP; END; A; END;END

Também se definiu a existência de uma relação hierarquica (em termos espaciais),

entre o primeiro objecto que aparece na especificação do paralelo e os restantes, desde

que a primeira expressão dê origem à activação de um objecto ou intervalo. Esta regra

foi realizada garantindo que o primeiro membro do paralelo é o primeiro a arrancar, e

logo o primeiro a criar a janela. Como os objectos geram o evento Ev_Start quando

iniciam a sua apresentação, é possível fazer a composição entre a geração deste evento e

o arranque dos restantes membros do paralelo. Se se chamar ao evento de início de

apresentação do primeiro membro do paralelo Aini, obtém-se como resultado da

compilação de um paralelo (PAR AND) entre A e B as expressões:

115

intervalos e objectos é modificado dentro da composição paralela, desde que os objectos

suportem o estado que está a ser sincronizado. Por exemplo, para a invocação de um

objecto objecto dentro de um paralelo parametrizado com SYNC(Pausa)

(sincronização do estado Pausa), é gerado o código apresentado na figura 6.17, onde é

utilizada uma variável Booleana auxiliar, local ao interpretador onde corre o código.

116

PAR ORobjecto?Ev_Start; objecto?Ev_Resume;

END; auxPausa:= FALSE; END; WHILE (TRUE) DO SEQ objecto?Ev_Paused; auxPausa:= TRUE; END; WHILE (TRUE) DO SEQ PAR OR objectoi?Ev_Paused; // para todos os outros objectos END; objecto!Pause; END; WHILE (TRUE) DO SEQ PAR OR objectoi?Ev_Resume; // para todos os outros objectos END; IF (auxPausa) objecto!Resume; END;END

Figura 6.17: Código gerado para a invocação de um objecto dentro deum PAR SYNC(Pausa).

O código de terminação do paralelo (PAR X) é obtido pela expressão:PAR X A ; B ; END

6.4.1.7. Execução Repetitiva

A compilação de uma operação de execução repetitiva baseia-se na equivalência

entre as duas expressões seguintes:

117

O código de terminação da execução repetitiva da expressão A é obtido

calculando:WHILE (expressão) A

6.4.1.8. Outras Operações

Nesta versão do compilador não foram suportadas as operações de execução

condicional, operação de atribuição e composição alternativa, embora essas operações

existam nos interpretadores. O motivo que justificou a sua não implementação, foi os

interpretadores não suportarem a gestão de variáveis distribuídas, pois essa

funcionalidade é indispensável para suportar esses operadores de uma forma genérica

em ANSAware.

6.4.2. Compilador

O compilador foi desenvolvido utilizando o LEX e o YACC [Schreiner+ 85, SUN

88], e realiza o algoritmo de compilação descrito na secção anterior. O compilador

funciona em três fases distintas.

Na primeira fase é lido o script com a especificação da aplicação multimédia, e é

criada uma estrutura em árvore com a representação do comportamento, mais uma lista

com os objectos definidos. Nesta primeira passagem são efectuados um conjunto de

testes semânticos às expressões, utilizando a informação obtida no gestor de tipos.

Nomeadamente, são validadas todas as operações de entrada e saída, sendo verificado se

o tipo de objecto suporta os estados associados aos eventos e acções. A árvore

construída é semelhante à descrita para os interpretadores (secção 6.3.2), embora os nós

tenham uma estrutura interna diferente.

118

ç ç j [ ]

Na fase final é feita a aglutinação das várias expressões nas máquinas de estados

finais, sendo ainda criada a máquina de estados de arranque da aplicação, que inclui o

código de invocação das operações PREPARE, com os parâmetros para criação dos

objectos multimédia.

Estruturas de Dados

O compilador guarda os dados em duas estruturas independentes. A primeira

estrutura é uma árvore de nós gerada a partir da especificação do comportamento, onde

se guarda a informação sobre o código, à medida que este é criado. A segunda estrutura

é uma lista com todos os objectos multimédia utilizados na especificação, e que inclui

ponteiros para os intervalos utilizados.

Na figura 6.18 é representada a estrutura de dados de um nó da árvore. Para além

dos dados que definem o tipo de operação, os nós vão ter dois campos que vão ser

utilizados durante a geração de código. O primeiro é um ponteiro para uma string com

o código de terminação. O segundo é um ponteiro para uma lista de estruturas do tipo

st_code, que são a base da geração de código. Estas estruturas contêm ponteiros para

um buffer (tampão) onde guardam o código referente a uma invocação (de um objecto,

intervalo ou operação ABORT), e um ponteiro para o objecto afectado pelo código (que

pode ser NULL). Para além de fazerem parte das listas associadas às árvores de nós,

estes nós também fazem parte de listas associadas aos descritores de objectos. O código

da expressão associada a cada nó da árvore pode ser obtido calculando o paralelo de

todas as estruturas de código na lista.

Na figura 6.19 é representada a estrutura de dados de um nó da lista de descritores

de objectos. Estas estruturas mantêm um vector de ponteiros para os intervalos que

compõem o objecto, uma estrutura com os dados internos do objecto multimédia, e uma

119

ód1 d2 d3

Código Código Código

Figura 6.18: Constituição dos elementos daárvore de comportamento.

d1 d2 d3

Código Código Código

Cache da informação do gestor de tipos

Figura 6.19: Constituição dos elementos dalista de objectos utilizados.

Exemplo de Compilação

Na figura 6.20, é representado um exemplo com um excerto de um script, onde

são utilizados três objectos multimédia: A, B e C. Após a primeira fase de compilação é

gerada a árvore de nós com a estrutura representada na figura 6.21.

PAR OR SEQ A; B; END; C;END;

Figura 6.20: Exemplo da secção deespecificação de comportamentode um script.

B

C

A

SEQ

PAR OR

Inic io

1

3

2

4

5 Figura 6.21: Estrutura de nós criada a partirdo exemplo da figura 6.20.

Durante a segunda fase de compilação a estrutura é percorrida a partir do início,

sendo gerado o código apresentado na tabela 6.5, pela ordem indicada. O primeiro nó a

ser processado é o 1, sendo criado uma estrutura do tipo st_code, que é colocada na

120

g p ç , p g

terminação do nó 5 tem a condição de terminação da apresentação, e os descritores dos

objectos A, B e C vão ter respectivamente os descritores d1, d2 e d3 da lista do nó 5.

Na terceira fase de compilação são geradas as máquinas de estados dos três

objectos, sendo acrescentado o código de inicialização das referências para os objectos.

Por exemplo, para a máquina de estados do nó A seria gerado o código apresentado na

figura 6.22.

Nó Código de Terminação Código1 A?Ev_End d1 : SEQ A!PLAY; A?Ev_End; END

2 B?Ev_End d1 : SEQ B!PLAY; B?Ev_End; END

3 SEQ

A?Ev_End; B?Ev_End;

END

d1 : SEQ A!PLAY; A?Ev_End; END

d2 : SEQ A?Ev_End; B!PLAY; B?Ev_End;

END

4 C?Ev_End d1 : SEQ C!PLAY; C?Ev_End; END

5 PAR OR

SEQ A?Ev_End; B?Ev_End;

END;

C?Ev_End;

END

d1 : PAR OR

SEQ A!PLAY; A?Ev_End; END;

SEQ C?Ev_End; A!STOP; END;

END

d2 : PAR OR

SEQ A?Ev_End; B!PLAY; B?Ev_End;

END;

SEQ C?Ev_End; B!STOP; END;

END

d3 : PAR OR

SEQ A?Ev_Start; C!PLAY;

C?Ev_End; END;

SEQ

SEQ A?Ev_End; B?Ev_End; END;

C!STOP; END;

END

Tabela 6.5: Código intermédio gerado durante a segunda fase decompilação do exemplo da figura 6.20.

STATEMACHINE A ( A MMObject Tipo, B MMObject Tipo,

121

INIT A; INIT B; INIT C; END; PAR OR /* Código gerado na fase 2 */ SEQ A!PLAY; A?Ev_End; END; SEQ C?Ev_End; C!STOP; END; END;END;ENDSM

Figura 6.22: Máquina de estados criada para o objecto A, a partir doexemplo da figura 6.20.

122

SOURCE (1, Source); FILTER (0); SINK (1, Sink);LINK (2, Source, Sink);START <1/*Locator*/,,0>; END <1/*Locator*/,,-1>;PROPERTIES (4, SELFCONTROLLED, "A.scr", FILENAME, "Exemplo");ENDOBJECT;/* Objectos B e C são semelhantes a A */

INITIALIZEA { Status (1, 41/*RemCtrl*/); Register (1, 29/*Contexto*/); }/* B e C é igual a A */END

BEHAVIOURSEQ PAR PREPARE A; PREPARE B; PREPARE C; /* Cria os objectos */ END; PAR BIND B A; BIND B C; // Inicializa as referência de A e C em B BIND C A; BIND C B; // Inicializa as referência de A e B em C END; PAR BIND A B; BIND A C; // Inicializa as referência de B e C em A END; PAR OR // Código de terminação da aplicação SEQ A?Ev_End; B?Ev_End; END; C?Ev_End; ENDEND;ENDSM

Figura 6.23: Máquina de estados de arranque da aplicação criadapara o exemplo da figura 6.20.

Observe-se que na máquina de estados de arranque gerada, o controlador em A é o

último a ter as referências para os interfaces inicializados. Como A é o primeiro objecto

a correr no paralelo, deve ser o último a ser inicializado, de modo a garantir que a

123

Na figura 6.24 apresenta-se o script de uma aplicação de demonstração do sistema

de desenvolvimento de aplicações multimédia, cujo aspecto durante a execução é

mostrado nas figuras 6.26 a 6.29.

Esta aplicação apresenta um texto, composto por três páginas. Na primeira página

apresenta um texto com uma imagem, enquanto toca uma música de fundo

continuamente. Na segunda página alterna entre um estado onde apresenta o "botão"

Tocar, e outro onde apresenta um vídeo com o som respectivo e o "botão" Parar. Na

última página torna a apresentar um texto e uma imagem. O utilizador muda de página

carregando no texto com o rato, podendo terminar a aplicação em qualquer altura

carregando no "botão" Terminar.

SPECIFICATION Demonstracao : NOEXIT ;

MMOBJECT Texto textType WITH SUB$STRUCTURE (

Introducao <Label,Pagina1> <Label,FimPagina1> Exemplo <Label,Pagina2> <Label,FimPagina2> Fim <Label,Pagina3> Ev_End )

filename "demo.txt"anotfile "demo.ant"windowname "Exemplo"

rows "40" columns "120" geometry "+50+50";

SOURCE text; SINK scrolledwindow;LINK text scrolledwindow;

ENDOBJECT;

MMOBJECT Arquitectura imageTypeWITH FILENAME "arquitec.gif"

WINDOW$NAME "void" // Janela sem nome WINDOW$X "500" WINDOW$Y "150";

SOURCE imageSource; SINK imageSink;LINK imageSource imageSink;

ENDOBJECT;

( omitida a declaração dos objectos de imagem : Terminar,Tocar, Parar, Autor )

124

MMOBJECT Musica audiotypeWITH filename "peanuts.au";SOURCE sound;

ENDOBJECT;

( omitida a declaração do objecto de audio : Audio )

BEHAVIOUR PAR OR SEQ PAR OR // Primeira Página

Introducao; Arquitectura; WHILE (TRUE) DO Musica; Texto?Ev_Click;

END; PAR OR // Segunda Página

Exemplo; WHILE (TRUE) DO SEQ PAR OR Tocar; Tocar?Ev_Click; END; PAR OR Video; Audio; Parar; Parar?Ev_Click; END; END;

Texto?Ev_Click; END; PAR // Terceira Página Fim; Autor; END; END; Terminar; Terminar?Ev_Click; END;ENDSPEC; // Demonstracao

Figura 6.24: Especificação de uma aplicação de apresentação dosistema desenvolvido.

125

ç p ç p

Neste documento, a interacção com o utilizador é feita através dos eventos do tipo

Ev_Click, associados ao premir de um botão do rato sobre uma imagem ou um texto.

Na especificação, são utilizadas operações de recepção destes eventos dentro de

operações PAR OR, de forma a interromper a acção corrente. Por exemplo, a

interrupção da aplicação é feita através da imagem Terminar, que se mantém activa

durante todo o documento. Quando for recebido o evento originado nessa imagem, a

semântica da operação PAR OR provoca a destruição de todos os objectos criados nos

restantes ramos do paralelo, onde se inclui a sequência que contém a aplicação. Para se

terminar a aplicação também se poderia ter utilizado a operação ABORT.

Na aplicação descrita, a página só muda quando o utilizador carrega com o rato

no texto. Caso se pretendesse, também poderia ter sido adicionada uma temporização,

utilizando um objecto de Relógio. Por exemplo, caso se pretendesse parar a

apresentação da terceira página ao fim de 3 segundos poder-se-ia utilizar o código

apresentado na figura 6.25.

MMOBJECT Timeout timerTypeSOURCE timer;INIT <Locator, 0>;FIM <Locator, 3000>; /* 3000 milisegundos */

ENDOBJECT;...

BEHAVIOUR...

PAR OR // Terceira Página Fim; Autor; Timeout; END;

...ENDSPEC

Figura 6.25: Modificação para ter um tempo de apresentação daterceira página.

126

Figura 6.26: Primeira página da aplicação de demonstração.

Figura 6.27: Segunda página da aplicação de demonstração, quandoo vídeo não está a correr.

127

Figura 6.28: Segunda página da aplicação de demonstração, quandoo vídeo está a correr.

Figura 6.29: Terceira página da aplicação de demonstração.

128

Comparando as características do sistema apresentado com as características da

norma MHEG (secção 2.3.4), verifica-se haver um conjunto de conceitos comuns,

embora os dois trabalhos tenham sido definidos para contextos complementares. A

norma MHEG foi definida para a troca de informação multimédia e hipermédia,

enquanto o sistema apresentado nesta dissertação foi definido para a construção de

arquitecturas de desenvolvimento de aplicações multimédia. Embora o MHEG refira a

interacção com os objectos de uma forma geral, não a especifica, sendo a

compatibilidade com a norma definida apenas em relação à capacidade do sistema para

interpretar, e poder gerar objectos de informação multimédia MHEG, para qualquer

aplicação multimédia.

Assim, para o sistema desta tese ser compatível com a norma MHEG, seria

necessário desenvolver um ou dois utilitários que no conjunto funcionassem como uma

máquina MHEG. No conjunto deveria ser suportada a funcionalidade de um formatador

e um analisador MHEG, que fizessem a conversão entre as aplicações e o formato dos

objectos de informação multimédia MHEG.

O maior problema para suportar a conversão das aplicações para objectos de

informação multimédia MHEG, seria em relação aos dados dos objectos multimédia,

pois para poderem ser transferidos, seria necessário que os servidores de componentes

soubessem encapsular os dados que existem nas suas bases de dados em objectos

MHEG de Conteúdo. Em relação às aplicações especificadas em script, elas são

directamente suportadas pelos objectos MHEG Script, que permitem transportar

qualquer formato de script.

Em relação à conversão de objectos de informação multimédia MHEG para

aplicações do sistema, havia novamente um problema em relação aos dados multimédia,

129

, g p

HyTime

Comparando as características do sistema apresentado com as características da

norma HyTime (secção 2.3.3), verifica-se que são utilizadas abordagens bastante

diferentes em relação à representação de aplicações multimédia, ao contrário do que

acontecia em relação à norma MHEG.

No entanto é possível o desenvolvimento de uma máquina HyTime, que interprete

e execute construções desta linguagem, pois os mecanismos de sincronização definidos

no sistema apresentado são suficientemente poderosos para suportar o tipo de

sincronização definido no HyTime. Essa máquina, teria de começar por carregar todo o

documento HyTime, interpretando os vários campos do documento, e correndo um

algoritmo de conversão para uma especificação, onde fosse feita a resolução dos

endereços HyTime, e a geração do código associada às ligações. Tal como no caso

anterior, este código recorreria, na maior parte dos casos, à utilização de eventos. Mas

neste caso, a conversão era mais complexa, pois ao contrário do MHEG, as ligações

HyTime apresentam uma diversidade muito grande de formas.

Os espaços de coordenadas finitos, utilizados no HyTime, são directamente

modeláveis por eventos. Para suportar a apresentação das aplicações, seriam gerados

eventos para todas as posições do espaço de coordenadas onde é necessário activar um

objecto, e onde terminam os intervalos de apresentação dos objectos. Em relação aos

vários valores possíveis do atributo EXTENT RECONCILIATION, que define a

adaptação dos objectos aos intervalos, seria gerado código específico para cada valor.

Por exemplo, para a estratégia de clipping seria utilizada uma composição paralela PAR

OR entre a invocação do objecto e o evento do fim do intervalo.

130

p ç p p (

um filtro).

Como o sistema desta tese é mais poderoso na descrição de interacções entre

objectos, uma conversão para o HyTime teria sempre de ser encarada como uma

fotografia estática de uma dada aplicação no tempo.

Extensões ao ODA

Comparando as características do sistema apresentado com as características da

extensões multimédia à norma ODA (secção 2.3.2) no que diz respeito ao modelo de

sincronização, verifica-se que as extensões ao ODA praticamente realizam um

subconjunto dos operadores, sendo directamente traduzíveis para as especificações de

sincronização na linguagem definida nesta dissertação.

O contrário já não é verdade, pois há especificações no sistema apresentado que

não são traduzíveis. O problema está directamente associado à não existência de um

interface funcional para interagir com os objectos.

WWW

Comparando as características do sistema apresentado com as características do

WWW (secção 2.3.1), verifica-se que o WWW é mais limitado.

As apresentações definidas em WWW são definidas utilizando o HTML, que só

permite representar relações estáticas, não suportando a noção de tempo. Assim, é

possível definir aplicações mais complexas no sistema apresentado, para além das que

são possíveis em HTML, pois no sistema apresentado são suportadas hiperligações. No

entanto, o WWW é um sistema aberto, que tenderá a evoluir para englobar mais

facilidades, nomeadamente com a adopção de um novo formato para representar

documentos, com funcionalidades semelhantes às descritas neste documento.

131

Ao longo do texto já foram apresentadas algumas das limitações do sistema

realizado. Nesta secção vão-se aprofundar algumas dessas limitações, sendo

apresentadas outras que ainda não foram referidas.

Num primeiro grupo, incluem-se aquelas que derivam de opções tomadas durante

o desenvolvimento do sistema. Entre elas, destaca-se a opção de ter uma estrutura

interna estática para os objectos multimédia, e de não se suportar uma sincronização de

baixo nível.

Os objectos multimédia quando arrancam têm internamente um conjunto de

componentes que é fixo e se mantém activo até à destruição do objecto. Esses

componentes são invisíveis para o utilizador e para o autor das aplicações, sendo apenas

visíveis os portos dos objectos, o que permite reconfigurar as ligações de fluxos de

dados entre os componentes. No entanto, existem aplicações onde esta estrutura pode

ser excessivamente rígida, como por exemplo, numa conferência. Caso um novo

participante pretenda entrar na conferência, vai obrigar a modificar a estrutura dos

objectos multimédia que estão activos, pois é necessário criar um componente para

servir o novo participante. A solução para este problema passaria pela definição de

novos estados, que controlassem a activação ou destruição de objectos componentes

dentro do objecto multimédia.

Nesta tese, a sincronização foi definida primordialmente para um nível do

controlo de apresentação de objectos multimédia relativamente elevado. Embora o

mecanismo utilizado seja suficientemente genérico para representar a sincronização de

baixo nível, a sua implementação é, no caso geral, ineficiente. A utilização de um

controlador numa cápsula diferente da dos componentes onde a sincronização tem de

ser feita, introduz um atraso adicional, resultante de ser necessário enviar uma acção de

132

q ç j (Q ),

depois a parametrização do operador paralelo em termos das influências entre os vários

objectos multimédia, para definir as relações entre objectos, que seriam realizadas,

através da interacção directa entre objectos componentes.

Outro conjunto de limitações resultam dos utilitários desenvolvidos, que não

realizam a totalidade das funções desejáveis para suportar integralmente o modelo

definido nesta dissertação.

O interpretador desenvolvido suporta a maior parte dos operadores definidos na

linguagem, no entanto, não suporta variáveis de estado distribuídas, e no que diz

respeito à gestão do interface de estados, a sua funcionalidade ficou aquém do que foi

originalmente pensado.

O facto de não serem suportadas variáveis distribuídas, limitou razoavelmente a

complexidade das aplicações que podem ser utilizadas. Por outro lado, não possibilitou

a sua utilização para resolver alguns problemas dos atrasos variáveis na comunicação. O

princípio seria o de utilizar a função TestAndSet do interface Remctrl que faria,

de uma forma atómica, um teste ao valor da variável, seguida de modificação. Sempre

que se quisesse ter na aplicação uma transição com recepção atómica de mensagens, era

utilizada uma variável distribuída para definir qual seria a transição. Quando o

interpretador recebesse um evento que poderia provocar uma transição, invocava a

operação TestAndSet sobre o interface do interpretador que estava a gerir a variável.

Caso fosse a primeira invocação, definia o próximo estado do sistema, senão, obtinha o

valor do próximo estado, que alguém já tinha definido anteriormente.

Em relação à gestão de interfaces de estados, as limitações decorrem do facto do

interpretador realizado:

i) não aceitar como entrada invocações de acções de estados,

133

defeito, associado à ordem causal entre as várias fases das aplicações, definida pelo

operador SEQ.

O compilador desenvolvido é razoavelmente limitado em termos de utilização

prática, pois o tipo de arquitectura de controlo utilizado não é o mais eficiente para a

grande maioria das aplicações. No entanto, nesta dissertação não se pretendia

desenvolver um compilador que gerasse código eficiente, mas sim desenvolver

algoritmos de compilação genéricos, aplicáveis à geração de máquinas de estados para

controlo distribuído. Esse objectivo foi conseguido, sendo possível utilizar o algoritmo

definido, e eventualmente estendê-lo, para construir máquinas de estados com uma

configuração mista, como a que é preconizada na secção 3.4. A modificação do

compilador para passar a gerar código eficiente, consistiria em agrupar o código

referente a vários objectos no número mínimo de máquinas de estados, e na

optimização do código gerado, que apresenta um excesso de paralelismo, e poderia ser

evitado.

134

melhoramentos e extensões, bem como indicações para investigação futura.

7.1. CONCLUSÕES

Neste trabalho foi apresentado um sistema de desenvolvimento e apresentação de

aplicações multimédia interactivas distribuídas, baseado numa arquitectura de controlo

distribuído.

Construiu-se um modelo de objectos multimédia, onde é utilizada uma visão

simplificada dos objectos componentes, que esconde alguns aspectos da distribuição. As

características dos objectos são representadas utilizando estados, que agregam uma

parcela do estado interno, as acções relacionadas com essa funcionalidade, e os eventos

gerados, associados a modificações nessa parcela do estado interno. Cada objecto

oferece um interface que é composto pelo conjunto de interfaces dos estados que

suporta, permitindo uma definição gradual do interface de cada objecto. O modelo é

fortemente tipificado, sendo mantido num gestor de tipos toda a informação sobre os

tipos existentes no sistema, para permitir que todas as aplicações e ferramentas tenham

conhecimento das possibilidades disponíveis em cada momento, e facilitar a

expansibilidade do sistema. Definiu-se uma linguagem para representar as máquinas de

estados, com a expressividade necessária para suportar uma larga gama de aplicações

multimédia, e construiu-se um interpretador que a suporta. Por fim, definiu-se uma

linguagem de especificação de aplicações multimédia, baseada numa álgebra de

processos, para permitir o desenvolvimento de aplicações tirando partido das

possibilidades do modelo de objectos. Para esta linguagem, descreveu-se um algoritmo

de compilação genérico que permite gerar qualquer arquitectura de controlo, e

135

p ç j p q q p

interacção de controlo sobre os objectos, assim como qualquer forma de interacção com

os utilizadores. Além disso, permite encapsular as dependências do equipamento e a

distribuição interna ao objecto, oferecendo a possibilidade de integração de objectos

computacionais genéricos definidos noutros contextos, com modificações mínimas. Um

sistema de tipos construtivo permite uma fácil evolução das funcionalidades

disponíveis, de uma forma gradual, mantendo-se a compatibilidade com aplicações

definidas anteriormente. Por fim, a linguagem de especificação de aplicações definida, é

suficientemente genérica para representar um conjunto vasto de especificações, desde

aplicações destinadas a serem corridas por um único utilizador, a aplicações complexas

que envolvam a interacção entre diversas aplicações menores, que interagem com

diversos utilizadores.

7.2. TRABALHO FUTURO

Pretendeu-se com o trabalho apresentado nesta tese identificar o conjunto de

problemas relacionados com o suporte de aplicações multimédia em ambientes

distribuídos. Propôs-se um modelo para este tipo de aplicações, e desenvolveu-se um

sistema baseado nesse modelo. No entanto, durante este trabalho muitos outros

problemas se levantaram, podendo ser classificados em evoluções do modelo, que são

propostas para investigação futura, e melhoramentos na implementação do sistema

resultantes da experiência obtida.

Evolução do Modelo e Áreas de Investigação Futura

Objectos multimédia de estrutura dinâmica. Na implementação só se

utilizaram objectos multimédia com topologias de uma fonte e um destino, fixas. Seria

136

q ç j (Q ),

parâmetros relacionados com sincronização de baixo nível. Poder-se-ia também definir

formas de especificar sincronização de baixo nível entre fluxos de dados multimédia

distintos.

Controlo da ordem na recepção de eventos. Na implementação apresentada não

foi considerado o controlo da ordem de recepção de eventos, que pode apresentar

algumas distorções, como se viu na secção 6.1.3. Embora já exista um conjunto de

protocolos que verifica estas condições, eles introduzem uma latência que pode não ser

compatível com as necessidades das aplicações multimédia. Seria interessante o

desenvolvimento de procedimentos para controlar estas distorções, introduzindo um

atraso mínimo.

Controlo de falhas. Na implementação apresentada, não foi realizado um

mecanismo para o controlo de falhas durante a apresentação de aplicações. Seria

interessante o desenvolvimento de um sistema de controlo de falhas a nível de sistema,

que permitisse realizar o modelo de falhas fail-stop, preconizado na apresentação do

modelo.

Inversão do sentido da apresentação e arranque a partir de um ponto

arbitrário. Os interpretadores implementados permitem apenas correr as aplicações no

sentido normal, não sendo possível aos utilizadores fazer recuar a apresentação, ou

mesmo saltar para um ponto arbitrário da apresentação, a menos que essa possibilidade

tenha sido explicitamente prevista no script. A solução destes problemas é complexa

pois exige a extensão do modelo de modo a permitir representar de uma forma não

ambígua, qualquer ponto numa apresentação, utilizando por exemplo, relógios

vectoriais [Schwarz+ 91].

137

ç q p p p p

Editor Gráfico. Para facilitar o desenvolvimento de aplicações, seria desejável o

desenvolvimento de um editor gráfico para a criação de scripts.

MHEG. Tal como é referido na secção 6.6, seria possível desenvolver um

utilitário que forneça a funcionalidade de uma máquina MHEG.

Delegação do estado Contexto dos objectos multimédia num dos componentes.

No caso geral, e principalmente nos objectos onde é utilizado apenas um componente, o

facto de se ter o servidor do estado Contexto a correr na cápsula do servidor de

objectos, implica que é sempre adicionado um atraso adicional na invocação de acções

do interface do estado Contexto do objecto. Tal seria evitado se houvesse uma

delegação deste estado.

Na secção 6.7 são apresentados um conjunto de melhoramentos possíveis em

relação aos interpretadores e em relação ao compilador. Para além destes, seria ainda

possível pensar em outros melhoramentos nas ferramentas gerais do sistema tais como,

por exemplo, a construção de editores de média, para criar ficheiros de especificação de

anotações.

138

[Allen 83] James F. Allen. Maintaining Knoledge About TemporalIntervals. Communications of the ACM, 26(11):832-843,Novembro 1983.

[Altenhofen+ 93] Michael Altenhofen, Jürgen Dittrich, Rainer Hammerschmidt,Thomas Käppner, Carsten Kruschel, Ansgar Kückes, ThomasSteinig. The BERKOM Multimedia Collaboration Service. ACMMultimedia 93, pág. 457-463.

[Anklesaria+ 93] Farhad Anklesaria, Mark McCahill, Paul Lindner, DavidJohnson, Daniel Torrey, Bob Alberti. The Internet GopherProtocol (a distributed document search and retrieval protocol).Internet RFC 1436. Março 1993.

[Ansa 93] ANSAware 4.1. System Programming in ANSAware. Doc.RM.101.02, Fevereiro 1993.

[Arbab+ 93a] F. Arbab, I. Herman, G. J. Reynolds. An Object Model forMultimedia Programming. Computer Graphics Forum(Eurographics '93 Conference Issue), 12(3), September 1993.

[Arbab+ 93b] F. Arbab, P. J. W. ten Hagen, M. Haindl, F. C. Heeman, I.Herman, G. J. Reynolds, A. Siebes. Specification of the MADEObject Model. CWI, Documento Interno, 1993.

[Birrel+ 84] A. Birrel and B. Nelson. Implementing Remote Procedure Calls.ACM Transactions on Computer Systems, 2(1):39-59, Fevereiro1984.

139

Milouscheva, Jochen Sandvoss. The BERKOM MultiMediaTransport System. BERKOM Technical Report, Outubro 1992.

[Campbell+ 74] R. H. Campbell, A. N. Habermann. The Specification of ProcessSynchronisation by Path Expressions. Em Lecture Notes inComputer Science número 16, Operating Systems, pelos editoresG. Goos e J. Hartmanis, pág. 89-102. Springer-Verlag, 1974.

[Cardelli+ 85] Luca Cardelli, Rob Pike. Squeak: a Language forCommunicating with Mice. ACM Computer Graphics,19(3):199-204, 1985.

[CCITT 88] CCITT Recommendation X.501 (ISO/IEC JTC1/SC21 ISO9594-2). The Directory Models. Março 1988.

[CIP 90] CIP Working Group, Editor: C. Topolcic. Experimental InternetStream Protocol: Version 2 (ST-II). Internet RFC 1190, SRINetwork Information Center. Outubro

[Correia+ 93] Nuno Correia, Vasco L. Paulo, Nuno Guimarães. Specificationof the MADE Time Objects. INESC, 1993.

[Eun 93] Seong Bae Eun, Eun Suk No, Hyung Chul Kim, HyunwsooYoon, Seung Ryoul Maeng. Specification of MultimediaComposition and a Visual Programming Environment. ACMMultimedia 93, 167-173.

[Gallety 90] John Gallety. Occam 2. Pitman Publishing, 1990.

[Gettys+ 87] Jim Gettys, Ron Newman, Robert W. Scheiffer. Xlib - CLanguage X Interface. X Window System, X Version 11,Release 2, Setembro 1987.

140

[Herman+ 93] Ivan Herman, Graham J. Reynolds. MADE: A MultimediaApplication Development Environment. IEEE computerSociety's International Conference on Multimedia Computingand Systems (ICMCS 94), 1994.

[Hoare 85] C. A. R. Hoare. Communicating Sequential Processes. Prentice-Hall, 1985

[Hoepner 91] Petra Hoepner. Synchronizing the Presentation of MultimediaObjects - ODA Extensions. SIGOIS Bulletin, páginas 19-32,Julho 1991.

[Isis 92] The Isis Distributed Toolkit Version 3.0. User ReferenceManual. 1992.

[ISO 86] ISO 8879: Information Processing - Text and Office Systems -Standard Generalized Markup Language, 1986.

[ISO 87] ISO 8807. Information Processing Systems - Open SystemsInterconnection: LOTOS - A Formal Description TechniqueBased on the Temporal Ordering of Observational Behaviour,1987.

[ISO 89] ISO 8613: Information Processing - Text and Office Systems -Office Document Architecture (ODA) and Interchange Format,1989.

[ISO 11172] ISO 11172: Information technology - Coding of MovingPictures and Associated Audio for Digital Storage Media up toabout 1.5 Mbit/s (MPEG).

141

[ISO 93c] ISO/IEC/JTC1/SC18/WG8. SMSL Working DocumentSC29WG12.147. Abril 1993.

[Karjoth 88] Günter Karjoth. Implementing Process Algebra Specificationsby State Machines. Eighth International Symposium on ProtocolSpecification, Testing and Verification, Atlantic City, NewJersey, Junho 1988.

[Kretz 90] Francis Kretz. RAVI for the exchange of Audio VisualInteractive Scriptware. L'Echo des Recherches, 1990.

[Lamport+ 90] Leslie Lamport, Nancy Lynch. Distributed Computing: Modelsand Methods. Handbook of Theoretical Computer Science, pág.1159-1199. Elsevier Science Publishers,1990.

[Lauer+ 75] P. Lauer and R. Campbell. A description of path expressions bypetri nets. In Conf. Record 2nd ACM Symposium on Principlesof Programming Languages, pages 95-105, 1975.

[Lee+ 93] Tim Berners-Lee, Robert Cailliau, Nicola Pellow, Arthur Secret.The World-Wide Web Initiative. Proceedings INET'93.

[Levergood+ 93] Thomas M. Levergood, Andrew C. Payne, James Gettys, G.Winfield Treese, e Lawrence C. Stewart. AudioFile: ANetwork-Transparent System for Distributed AudioApplications. Proceedings of the USENIX Summer Conference,Junho 1993.

[Little+ 90a] Thomas D. C. Little and Arif Ghafoor. Synchronization andStorage Models for Multimedia Objects. IEEE Journal onSelected Areas in Communications, 8(3):413-427, April 1990.

142

IEEE Journal on Selected Areas in Communications, 9(9):1368-1382, December 1991.

[McCormack+ 91]Joel McCormack, Paul Asente, Ralph R. Swick. X ToolkitIntrisics - C Language Interface. X Window System, X Version11, Release 5, Agosto 1991.

[Mey+ 92] Vicki de Mey, Christian Breiteneder, Laurent Dami, SimonGibbs and Dennis Tsichritzis. Visual Composition andMultimedia. Proceedings Eurographics '92.

[Mey+ 93] Vicki de Mey and Simon Gibbs. A Multimedia Component Kit.ACM Multimedia 93, 291-300.

[Milner 89] Robin Milner. Communication and Concurrency. ComputerScience. Prentice-Hall, 1989.

[Newcomb+ 91] Steven R. Newcomb, Neil A. Kipp, and Victoria T. Newcomb.The HyTime: Hypermedia/Time-based Document StructuringLanguage. Communications of the ACM, 34(11):67-83,November 1991.

[Newcomb 93] Steven R. Newcomb. Multimedia Interchange Using SGML:The ISO "HyTime" Standard. SIGGRAPH 93, (V) 111- 141,August 1993.

[Obraczka+ 93] Katia Obraczka, Peter B. Danzig, Shih-Hao Li. InternetResource Discovery Services. IEEE Computer Magazine, pág.8-22, Setembro 1993.

143

[OSF 93] Open Software Foundation. OSF DCE Application DevelopmentReference, Revision 1.0. Prentice Hall, Inc, 1993.

[Patel+ 93] Ketan Patel, Brian C. Smith, and Lawrence A. Rowe.Performance of a Software MPEG Video Decoder. ACMMultimedia 93, 75-82.

[Pereira 94] Paulo Rogério Barreiros d'Almeida Pereira. Um Modelo para oDesenvolvimento de Aplicações Multimédia InteractivasDistribuídas. Dissertação de Mestrado, Instituto SuperiorTécnico, Lisboa, Portugal, Junho de 1994.

[Pinto 92] Paulo F. Pinto. Interface Definitions for Multimedia Interfaces.Palantir Internal Report n.092, University of Kent atCanterbury, October 1992.

[Pinto 93] Paulo F. Pinto. An Interaction Model for MultimediaComposition. PhD thesis, University of Kent at Canterbury,1993.

[Pinto+ 93b] Paulo F. Pinto, Peter F. Linington. A Language for theSpecification of Interactive and Distributed MultimediaApplications. Int. Conf. on Open Distributed Processing 1993,pág. 217-234.

[Pinto+ 94] Paulo Pinto, Luís Bernardo, Paulo Pereira. A ConstructiveType Schema for Distributed Multimedia Applications.Proceedings BRIS'94, pág. 419-434.

[Prabhakaran+93]B. Prabhakaran and S. V. Raghavan. Synchronization ModelsFor Multimedia Presentation With User Participation. ACMMultimedia 93, 157-166.

144

[Rose 90] Marshall T. Rose. The Open Book, a Practical Perspective onOSI. Prentice-Hall, 1990.

[Schreiner+ 85] Axel T. Schreiner, H. George Friedman. Introduction toCompiler Construction with UNIX. Prentice-Hall, Inc, 1985.

[Schwarz+ 91] Reinhard Schwarz, Friedemann Mattern. Detecting CausalRelationships in Distributed Computations: In Search of theHoly Grail. Lisboa 92: An Advanced Course on DistributedSystems, Junho 1993.

[Sousa+ 91] Paulo Sousa, Paulo Ferreira, José Monge, André Zúquete,Manuel Sequeira, Paulo Guedes, and José Alves Marques. IKImplementation Report. Technical Report, INESC-TR-0012,1991.

[Stefani+ 92] Jean-Bernard Stefani, Laurent Hazard and François Horn.Computational model for distributed multimedia applicationsbased on a synchronous programming language. ComputerCommunications, 15(2):114-128, Março 1992.

[Steinmetz 90] Ralf. Steinmetz. Synchronization Properties in MultimediaSystems. IEEE Journal on Selected Areas in Communications,8(3):401-412, Abril 1990.

[SUN 88] SUN Microsystems. Programming Utilities and Libraries.Revision A of 9 May 1988.

[XTP 92] XTP Protocol Definition 3.6. Protocol Engines Incorporated,Janeiro 1992.