Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Resumo
Este artigo apresenta um modelo para aplicações distribuídas com restrições tempo-real em
sistemas abertos. O modelo proposto utiliza o paradigma de reflexão computacional segundo a
abordagem de meta-objetos, que provê a separação entre funcionalidade e gerenciamento na
programação de aplicações. Conseqüentemente, o modelo possui dois níveis : um nível-base que
trata da funcionalidade do sistema, e um nível-meta que lida com escalonamento, restrições
temporais e de sincronização, assim como tratamento de exceções. O modelo é implementado
utilizando o padrão para sistemas distribuídos abertos CORBA, e tratando as restrições de tempo
localmente a partir da especificação de um timeout no cliente e do deadline associado no servidor.
Desta forma, o modelo garante um tratamento adequado para aplicações tempo-real do tipo
melhor esforço em ambientes distribuídos abertos. Finalmente, as características principais do
modelo proposto são ilustradas em um exemplo de aplicação de multimídia distribuída.
Abstract
This paper presents a model for distributed applications with real-time constraints in open
systems. The proposed model adopts the reflective paradigm according to the meta-object
approach, which provides the separation among functionality and management when
programming applications. Consequently, the model has two levels : a base-level which deals
with system functionality, and a meta-level which manages scheduling, time and synchronization
constraints, as well as exception handling. The model is implemented using the CORBA standard
for open distributed systems, and dealing with timing constraints locally, specifying timeouts in
the client and the associated deadlines in the server. Then, the model ensures an adequate
treatment of best-effort real-time applications in open distributed systems. Finally, the main
characteristics of the proposed model are shown in an example of a distributed multimedia
application.
1 Introdução
A interligação de computadores em redes de longa distância levou ao surgimento de
problemas derivados da heterogeneidade de equipamentos e das dimensões do sistema como
um todo. O surgimento destes problemas levou à adoção de arquiteturas abertas para o
tratamento deste tipo de sistema. Com a evolução das aplicações em rede, que evoluíram do
simples correio eletrônico até o processamento de dados, som e imagem em tempo-real, foram
introduzidos requisitos temporais que devem ser considerados na construção e na execução
destas aplicações. A integração destas questões de tempo-real em sistemas abertos tem sido
objeto de intensa pesquisa, mas ainda não se encontra devidamente estabelecida.
Este trabalho trata basicamente de aplicações com restrições de tempo-real em sistemas
distribuídos abertos, seguindo uma abordagem de melhor esforço (best-effort). Objetivando
permitir a programação de aplicações tempo-real em um ambiente distribuído e heterogêneo,
adotamos um modelo de programação, o Modelo Reflexivo Tempo-Real (RTR), e integramos
a este características da arquitetura CORBA e mecanismos para tratamento das questões
temporais presentes em sistemas distribuídos abertos.
Neste artigo descreveremos as características principais do resultado deste trabalho de
integração, o Modelo Reflexivo Tempo-Real Distribuído, e apresentaremos o mapeamento e a
implementação deste sobre uma plataforma composta pelo sistema operacional Solaris
adicionado de um suporte compatível com o CORBA. Ao final do artigo, apresentamos um
exemplo de aplicação de multimídia distribuída, consistindo basicamente em um sistema de
transmissão de mídias sob demanda, implementado com o objetivo de demonstrar a adequação
do modelo na programação de aplicações distribuídas com requisitos temporais.
* ORBeline é marca registrada da Post Modern Computing. Orbix é marca registrada da Iona Technologies.
aplicação e “meta-objetos” executam procedimentos de controle sobre o comportamento da
aplicação.
Os objetos-base tempo-real apresentam estrutura e comportamento similar ao dos
objetos convencionais. Adicionalmente, são associadas aos seus métodos restrições temporais
(predefinidas ou construídas pelo programador) e manipuladores de exceção. Restrições
temporais construídas pelo programador são declaradas no objeto-base e implementadas
através de procedimentos no meta-objeto gerenciador correspondente.
Os aspectos relativos a restrições temporais e de sincronização, escalonamento tempo-
real, e exceções temporais são tratados a nível-meta no modelo RTR. A nível-meta o modelo
possui um meta-objetos gerenciador para cada objeto-base da aplicação, e mais dois meta-
objetos especiais – meta-objeto escalonador e meta-objeto relógio.
Os meta-objetos gerenciadores são objetos multi-threadeds responsáveis pelo
gerenciamento dos pedidos de ativação dos métodos de seus objetos-base correspondentes,
pelo controle de concorrência em um objeto-base, pelo gerenciamento das restrições de
sincronização e pelo processamento das restrições temporais, quando é efetivamente decidido
pela ativação do método solicitado ou pelo levantamento de uma exceção temporal.
Para cada pedido de ativação recebido pelo meta-objeto gerenciador, é ativada uma
nova thread de controle, viabilizando o tratamento concorrente dos pedidos e permitindo um
tratamento mais efetivo das restrições temporais a eles associadas.
Por outro lado, um mecanismo de controle da concorrência garante a exclusão mútua
no objeto-base, permitindo que somente um de seus métodos esteja em execução em um
determinado momento. Este controle é realizado em função do estado do objeto-base, mantido
a nível de meta-objeto.
O meta-objeto escalonador tem como função básica receber, ordenar e liberar pedidos
de escalonamento de métodos dos objetos base que compõem a aplicação de acordo com
determinada política de escalonamento (predefinida ou introduzida pelo programador), visando
satisfazer as restrições temporais da aplicação dentro de uma política de melhor esforço. Desta
forma, diferentes pedidos de escalonamento, originados de um ou vários meta-objetos
gerenciadores, podem ser analisados globalmente e ordenados de acordo com a política de
escalonamento vigente.
O meta-objeto escalonador recebe do meta-objeto gerenciador requisições de
escalonamento de métodos com restrições temporais, e determina, de acordo com a política de
escalonamento implementada e com as restrições temporais associadas, o momento a partir do
qual o método em questão pode ser liberado para execução. Com a liberação para execução do
método, em função da disponibilidade de tempo e observados os aspectos de sincronização e
concorrência, o meta-objeto gerenciador decide pela liberação da execução do método
solicitado ou pelo levantamento de uma exceção temporal. Em seguida, após a execução do
método a nível-base, o controle é devolvido para o meta-objeto gerenciador, que libera o
meta-objeto escalonador para que processe o próximo pedido da fila de requisições, e retorna
o resultado da execução do método para o objeto que efetuou a requisição.
O meta-objeto relógio é uma abstração do relógio do sistema, estruturada na forma de
objeto. Sua função básica é receber pedidos do meta-objeto gerenciador para ativar métodos
num tempo futuro, detectar violação de timeouts e eventuais violações de restrições associadas
com métodos que estão aguardando para ser escalonados ou que aguardam o estabelecimento
de concorrência ou sincronização.
Na figura a apresentamos a dinâmica de uma chamada de método em uma aplicação
estruturada segundo o modelo RTR, composta por um conjunto de objetos-base e meta-
objetos gerenciadores.
META-OBJETO META-OBJETO
ESCALONADOR RELÓGIO
55555 ¹
‚ ƒ
Meta-Objeto Meta-Objeto
Meta
Meta Stub de
Stub//DII
DII Meta-Objeto
MetaStub
Meta de
Stub//DII
DII Meta-Objeto
Gerenciador
Comunicação Comunicação ’ Gerenciador
(MetaStub/DII) (MetaSkeleton)
• ƒ
Nível-Meta ‚ • ‘ †Nível-Meta
Nível-Base
• ˆ ‡
Nível-Base
‰
Objeto-Base
Meta
Meta Stub de
Stub/ /DII
DII Objeto-Base
MetaStub
Meta de
Stub/ /DII
DII
Objeto-Base Comunicação Comunicação Objeto-Base
(Stub/DII) (Skeleton)
Em sistemas abertos, além das exceções reject (restrição violada antes do início da
execução do método do objeto-base) e abort (execução do método já havia sido iniciada)
definidas pelo modelo RTR, deve ser previsto um novo tipo de exceção de modo a indicar a
ocorrência de uma violação do timeout imposto pelo cliente. A exceção timeout é detectada
pelo cliente com o auxílio do meta-objeto relógio e comunicada ao meta-objeto servidor
através do suporte de comunicação.
A chamada realizada pelo cliente é encaminhada via um MetaStub para o servidor ao
qual se destina a requisição (ação • da figura b). O MetaStub requisita o método chamado
pelo objeto-base através do ORB utilizando stubs (ação ‚), e envia ao meta-objeto relógio o
valor de timeout associado à chamada (ação •). O MetaStub passa a aguardar uma mensagem
de resposta do servidor, ou do meta-objeto relógio, sinalizando uma violação de timeout.
A requisição do método chega ao servidor correspondente através do ORB, que ativa o
método utilizando skeletons CORBA e MetaSkeletons. A ativação é desviada para o meta-
objeto gerenciador do servidor (ação ƒ da figura b), que interage com o meta-objeto
escalonador do servidor (ação „), aguardando por uma autorização para ativar o método
requisitado. Quando o meta-objeto escalonador sinaliza que o método deve ser executado, o
meta-objeto gerenciador do servidor verifica se as restrições temporais (ação …) e de
sincronização foram violadas, retornando uma exceção reject neste caso. Caso contrário, o
método é chamado no objeto-base do servidor (ação †). Concluída a chamada, ocorre
novamente a verificação das restrições temporais, resultando em uma exceção abort caso
estas tenham sido violadas. O resultado da chamada é enviado na forma de parâmetros ao
objeto-base do cliente, passando através do ORB (usando stubs e skeletons) e de MetaStub
(ações ‡, ˆe ‰).
No caso de, antes da finalização do protocolo, o meta-objeto relógio reportar a
MetaStub uma violação de timeout (ação Ž da figura b), uma indicação de exceção é enviada
ao objeto cliente (ação •). Em seguida, MetaStub remete através do ORB e do MetaSkeleton
a indicação de exceção do tipo timeout ao meta-objeto gerenciador do servidor (ações •, ‘
e ’), que se encarrega de cancelar a execução do método, retirando a requisição da fila de
pedidos do escalonador ou interrompendo a execução do método no objeto-base.
Utilizamos uma estrutura semelhante na implementação da chamada assíncrona,
permitindo no entanto que o objeto-base do cliente continue seu processamento assim que
efetuada a chamada. Caso o cliente venha a necessitar futuramente de dados de resposta
provenientes da execução do método no servidor (ou seja, em uma chamada do tipo semi-
síncrona), este pode verificar se a resposta se encontra disponível em um momento posterior,
ou mesmo bloquear-se à espera da chegada da resposta.
*
Solaris é uma marca registrada da Sun Microsystems
requisições recebidas pelos objetos, tratando-as segundo o modelo RTR distribuído conforme
especificado na seção 3.2.3.
Objetos do modelo devem pertencer à classe de escalonamento Real-Time (RT)
Solaris, com quantum de tempo infinito (ou seja, tempo de execução do processo ilimitado). A
atribuição de prioridades tempo-real aos processos aos quais pertencem os objetos-base e
meta-objetos do modelo ocorre durante a criação do meta-objeto.
Através do estabelecimento de prioridades utilizadas pelo Solaris no escalonamento a
processos e threads, em conjunto com a utilização do meta-objeto escalonador para determinar
a ordem a ser obedecida na execução dos métodos requisitados, será obtido o comportamento
desejado dos objetos da aplicação em conformidade com o especificado pelo modelo.
Se analisarmos apenas o processamento de métodos a nível-base, haverá ‘preempção’
de métodos dos objetos-base somente quando o método em execução chamar de modo
síncrono um outro método com restrições de tempo associadas, e residente em outro objeto –
ou seja, em caso de chamadas aninhadas. Neste caso, será processada a chamada, o método
aguardará a execução desta, mas o suporte deve impedir que aconteça a execução de um outro
método do mesmo objeto em nível-base devido às restrições de exclusão mútua que devem ser
garantidas no objeto-base.
Enquanto estiverem somente processando requisições de métodos a nível-meta, os
processos com objetos do modelo devem possuir uma mesma prioridade fixa. No caso do
processo receber a liberação do meta-objeto escalonador para executar um método a nível-
base, este deve modificar sua prioridade para o valor que lhe for atribuído pelo escalonador,
situado dentro de uma faixa de prioridades de nível-base, que será determinado em função do
número de objetos suspensos aguardando o retorno de chamadas síncronas aninhadas naquele
nodo da rede. Deste modo, garantimos que o objeto que realizou a chamada aninhada irá
reassumir o processador assim que terminar a execução do método requisitado.
Cód. Fonte Cód. Fonte Código Código Código Código Cód. Fonte Cód. Fonte
do Obj-Base do Meta-Obj Fonte das Fonte das Fonte do Fonte do do Obj-Base do Meta-Obj
Cliente Cliente MetaStubs Stubs Skeleton MetaSkeleton Servidor Servidor
Cód. Objeto Cód. Objeto Código Código Código Código Cód. Objeto Cód. Objeto
do Obj-Base do Meta-Obj Objeto das Objeto das Objeto do Objeto do do Obj-Base do Meta-Obj
Cliente Cliente MetaStubs Stubs Skeleton MetaSkeleton Servidor Servidor
Linker do Sistema
Código Código
CLIENTE Executável Executável SERVIDOR
DA APLICAÇÃO do Cliente do Servidor DA APLICAÇÃO
Composição do
Documento Multimídia
interface media
{
typedef sequence<octet> BufType;
/* public methods */
public:
media_server () { input = NULL; }
};
/* public methods */
public:
MetaMedia ( const char *object_name );
Os objetos de nível-base dos clientes recebem os dados dos servidores e exibem esta
mídia na estação do usuário, utilizando dispositivos periféricos como o alto-falante e o
monitor. O código destes objetos consiste basicamente nos programas de exibição de mídias
citados anteriormente.
A cada requisição enviada por um cliente a um servidor de mídia, um valor de timeout
expressa o tempo de espera aceitável do cliente para estes dados. A verificação e o tratamento
de exceções são realizados no objeto-base. Em caso de uma exceção do tipo reject, o
estado do servidor não é alterado e o cliente pode tentar executar a requisição novamente,
desde que respeitadas as restrições impostas. No caso de exceções do tipo abort ou
timeout, o estado do servidor foi alterado e o cliente não pode continuar o procedimento de
exibição da mídia sem perda de informação, devendo então indicar a exceção e interromper sua
execução.
A listagem e mostra a forma como o objeto-base do cliente de imagem, implementado
na linguagem C++, requisita ao servidor correspondente a mídia armazenada na forma de uma
arquivo MPEG. O cliente especifica o número máximo de bytes que devem ser lidos
(parâmetro num_bytes) e as restrições temporais associadas (parâmetro rt, do tipo
RTparams). A informação lida é depositada em um buffer (mybuf) e a chamada retorna o
número de bytes lidos (num_read). Através do campo de indicação de exceções exc do
parâmetro rt é verificado se ocorreu alguma violação de exceção temporal.
...
num_read = mediaserv->read_media ( mybuf, num_bytes, rt );
switch ( rt.exc() ) {
case NONE : break;
case REJECT : cerr << “Exception REJECT raised “
<< “reading MPEG media" << endl;
return(0);
case ABORT : cerr << “Exception ABORT raised “
<< “reading MPEG media" << endl;
exit(1);
case TIMEOUT: cerr << “Exception TIMEOUT raised “
<< “reading MPEG media" << endl;
exit(1);
default : cerr << “Timing exception unknown “
<< “reading MPEG media" << endl;
exit(1);
}
...
req->bind(this->_object_name());
_env = req->_environment();
if ( _env.check_exception()) {
handle_exception( _env );
return(0);
}
}
return ret;
}
...
7 Conclusões e Perspectivas
Este artigo descreveu um modelo de programação de aplicações tempo-real em
sistemas distribuídos abertos, o Modelo Reflexivo Tempo-Real (RTR) Distribuído, seu
mapeamento e implementação sobre uma plataforma de execução, e o desenvolvimento de
uma aplicação tempo-real utilizando o referido modelo.
O Modelo RTR permite que mecanismos de controle de restrições temporais e políticas
de escalonamento adequados às necessidades específicas de uma aplicação sejam introduzidos
e/ou modificados diretamente pelo programador da aplicação a nível-meta, sem implicar em
alterações no código da aplicação ou no suporte de execução, conforme visto no exemplo de
aplicação.
Em adição à flexibilidade provida pela possibilidade de programação em nível-meta, o
uso de reflexão computacional no Modelo RTR, ao permitir que a funcionalidade de uma
aplicação seja implementada separadamente do controle de seu comportamento, proporciona
um maior grau de reutilização e facilita o desenvolvimento e a manutenção de aplicações
tempo-real.
O modelo de programação RTR é integrado a sistemas abertos utilizando o modelo de
objetos adotado pelo CORBA, no qual as interações acontecem segundo o paradigma cliente-
servidor, e através da adoção de mecanismos de tratamento da questão temporal adequados ao
ambiente distribuído e heterogêneo. As restrições de tempo são tratadas localmente a partir da
especificação de um timeout no cliente e do deadline associado no servidor. Desta forma, o
modelo garante um tratamento adequado para aplicações tempo-real do tipo melhor esforço
em ambientes distribuídos abertos.
Adicionalmente, foram realizados o mapeamento e a implementação do modelo numa
plataforma distribuída. O mapeamento do modelo considerou como base uma plataforma
CORBA e o sistema operacional Solaris, da Sun Microsystems. A implementação do modelo
distribuído se encontra concluída e em pleno funcionamento.
O processo de desenvolvimento de aplicações distribuídas com restrições temporais
envolvidas foi ilustrado através de um exemplo de programação de uma aplicação de
multimídia distribuída, consistindo basicamente de um sistema de fornecimento de mídias sob
demanda para composição de um documento multimídia.
A continuidade do trabalho apresentado neste artigo segue atualmente várias direções,
como a utilização do modelo RTR distribuído em aplicações de multimídia distribuída, o
desenvolvimento de ferramentas de análise temporal, e a especificação de uma linguagem
tempo-real com base nas características do modelo RTR.
Encontra-se em fase de especificação uma linguagem de programação tempo-real
baseada na linguagem Java. A linguagem Java-RTR irá incorporar as características presentes
no modelo RTR. Java-RTR será construída de maneira a permitir o cálculo do tempo máximo
de execução de programas e a utilização de ferramentas para análise do comportamento
temporal dos mesmos.
O desenvolvimento de ferramentas para análise temporal de programas consiste em
outra das atividades em curso, previstas no sentido de providenciar um ambiente de
programação para o tipo de aplicações citadas. Através destas ferramentas será possível
analisar o comportamento temporal de programas desenvolvidos segundo o modelo reflexivo
tempo-real.
A utilização do modelo RTR distribuído para a programação de aplicações de
multimídia consiste em um outro trabalho que se encontra em andamento. As características do
modelo serão exploradas de modo a permitir a transmissão e exibição de mídias em sistemas
abertos levando em conta requisitos de tempo e sincronismo derivados da qualidade de serviço
imposta pelos clientes da aplicação. Serão explorados mecanismos de computação imprecisa
através de múltiplas versões de métodos que propiciem serviços com níveis de qualidade
diferentes, de modo a permitir a satisfação das restrições impostas sem implicar na interrupção
do funcionamento da aplicação.
Além dos trabalhos que se encontram em andamento e que de alguma forma estão
relacionados com o modelo reflexivo tempo-real, podemos destacar outras propostas de
continuidade do trabalho desenvolvido nesta dissertação.
Primeiramente, apresentamos como proposta de trabalho a ser desenvolvido a
implementação de ferramentas de auxílio à programação de aplicações utilizando o modelo
RTR distribuído.
Uma outra possibilidade de continuidade do trabalho apresentado nesta dissertação
consiste no mapeamento do modelo RTR distribuído sobre outras plataformas de execução,
além da plataforma Solaris. Este trabalho seria seguido da implementação do modelo sobre
estas novas plataformas adicionada de um ORB para prover a comunicação em ambiente
aberto.
Finalmente, como perspectiva de um futuro trabalho propomos a validação do modelo
RTR distribuído a partir de aplicações com maior grau de complexidade, envolvendo um
ambiente realmente heterogêneo, o que seria possível a partir do mapeamento do modelo sobre
outras plataformas de execução, e a avaliação do modelo comparando-o com outros modelos
tempo-real como os apresentados em [Hon 94], [Kim 94], [Li 94] e [Tak 92].
8 Bibliografia
[Aud 90] Audsley, N. ; Burns, A. “Real Time System Scheduling”, Specification and Design for
Dependability, PDCS - Predictability Dependable Computer Systems - ESPRIT, 1st Year
Report, LAAS, Toulouse, May 1990.
[Fab 95] J.-C. Fabre; V. Nicomette; T. Pérennou; Z. Wu “Implementing Fault-Tolerant
Applications using Reflective Object-Oriented Programming”, 25th IEEE Workshop on
Future Trends in Computer Science (FTCS’95), June 1995.
[Fra 95] J. Fraga; J.-M. Farines; O. Furtado; F. Siqueira “A Programming Model for Real-Time
Applications in Open Distributed Systems”, 2nd IEEE Workshop on Future Trends in
Distributed Computing Systems (FTDCS’95), August 1995.
[Fur 95] O. J. V. Furtado “Um Modelo e uma Linguagem para Aplicações Tempo Real”, Exame de
Qualificação para Doutorado, PGEEL–UFSC, Outubro 1995.
[Hon 94] Y. Honda; M. Tokoro “Reflection and Time-Dependent Computing: Experiences with the
R2 Architecture”, Sony Computer Science Laboratory Inc., Technical Report SCSL-TR-
93-017, Tokio, Japan, July 1994.
[Kar 93] A. Karmouch “Multimedia Distributed Cooperative System”, Computer Communications,
Vol. 16, No. 9, September 1993.
[Kim 94] K.H. Kim; H. Kopetz “A Real-Time Object Model RTO.k and an Experimental
Investigation of Its Potentials”, COMPSAC’94 Proceedings, November 1994.
[Li 93] G. Li “Supporting Distributed Real-Time Computing”, PhD Thesis, University of
Cambridge Computer Laboratory, Technical Report 322, August 1993.
[Li 94] G. Li “Distributed Real-Time Objects : the ANSA Approach”, 1st Workshop on Object-
oriented Real-time Dependable Systems, September 1994.
[Mae 87] P. Maes "Concepts and Experiments in Computational Reflection"; OOPSLA'87
Conference Proceedings, pp. 147-155, October 1987.
[OMG 93] OMG – Object Management Group “The Common Object Request Broker : Architecture
and Specification”, Revision 1.2, OMG Document Number 93-12-43, December 1993.
[Tak 92] K. Takashio; M. Tokoro “DROL : An Object-Oriented Programming Language for
Distributed Real-Time Systems”, OOPSLA’92 Conference Proceedings, October 1992.