Jordan Janeiro UM ESTUDO COMPARATIVO ENTRE MIDDLEWARES DESTINADOS A SISTEMAS EMBARCADOS Monografia apresentada ao curso de Introdução à Computação Móvel, como parte do programa de pós-graduação da PUC-Rio. Prof. Orientador: Markus Endler Departamento de Informática Rio de Janeiro - RJ 06 de Novembro de 2006 Sumário 1 . Introdução 3 2 . RUNES 5 3 . MicroQoSCORBA 9 4 . OCP 13 5 . Comparação dos Middlewares 16 5.1. Avaliação do RUNES 17 5.2. Avaliação do MicroQoSCORBA 18 5.3. Avaliação do OCP 19 6 . Conclusão 22 7 . Referências 24 1. Introdução Sistemas embarcados ou embutidos (embedded systems) refere-se aos sistemas microprocessados, embutidos nos dispositivos que eles irão controlar, e que são capazes de realizar operações específicas com recursos computacionais restritos e direcionados especificamente para as tarefas do dispositivo. Para ser ter uma certa dimensão do mercado de sistemas embutidos, o número de dispositivos manufaturados engloba cerca de 11 bilhões de peças por ano [2]. Esse mercado não inclui somente os dispositivos microeletrônicos em si, como também ambientes de desenvolvimento e execução, e aplicações, desde aquelas direcionadas para uma pequena cozinha como para sistemas de controle de grandes aeronaves, como o Boeing 747 [2]. Na última década, a pesquisa em ambientes embarcados com suporte à rede focou quase que exclusivamente no desenvolvimento de dispositivos miniaturizados, com grande capacidade de processamento e comunicação. Portanto, pouca atenção foi dada à produção de software para estes sistemas. Com isso, o software para esses sistemas começou a ser desenvolvido de uma forma ad-hoc, com pouca ou nenhuma atenção para componentização e reusabilidade. Mesmo quando esforços eram despendidos para prover tais características, a vasta gama de dispositivos controlados usados em ambientes embarcados enunciava uma grande complexidade na configuração, desenvolvimento e reconfiguração dinâmica de software. Assim, fica evidente a necessidade de plataformas de programação com abstrações que permitam atender um espectro mais amplo de sistemas embarcados heterogêneos e que ofereça mecanismo para configurar, desenvolver e reconfigurar dinamicamente o software para aplicações envolvendo sistemas embarcados [1]. Tais plataformas englobam middlewares, que para sistemas embarcados heterogêneos são, geralmente construídos na forma de frameworks, e que mais recentemente estão sendo usados em sistemas embarcados pequenos com diferentes graus de sucesso. Como muitas estações de trabalho possuem mais memório cache da UCP do que esses sistemas embarcados possuem de memória do tipo ROM ou RAM [2]. Middlewares de propósito geral desenvolvidos para esses ambientes ricos em memória geralmente falham quando atingem ambientes com poucos recursos em termos de memória. Outras soluções foram desenvolvidas para pequenos dispositivos embarcados, porém tipicamente essas soluções são pontuais e atendem apenas a um pequeno conjunto de requisitos, implementadas de uma forma estática (código estático). Portanto, essas soluções não possuem a flexibilidade necessária para suportar o grande número de aplicações para sistemas embarcados, ou então não provêm o conjunto adequado de requisitos apropriadas para as funcionalidades de uma determinada aplicação ou hardware. Uma outra deficiência dos middlewares atuais nessa área é a ausência de suporte para as diversas propriedades de qualidade de serviço ( QoS ) como: tolerância a falha, segurança e comportamento de tempo-real [2]. Middlewares do tipo CORBA, provaram ser uma ferramenta bastante valiosa, para resolver diversos problemas relacionados à comunicação e heterogeneidade em sistemas distribuídos de sistemas distribuídos. CORBA provê uma excelente arquitetura de middleware, independente de plataforma, que permite o desenvolvimento de aplicações orientadas a objetos distribuídas. Dentre suas características, separa interfaces das implementações, encapsula protocolos de rede e ambientes de execução de linguagens de programação, e provê um grande conjunto de serviços e APIs. Por essa razão muitos dos middlewares existentes se baseiam em características do CORBA. Nas próximas seções serão apresentados alguns tipos de middlewares voltados para sistemas embarcados. Em seguida será apresentada uma comparação entre estes middlewares com relação a de alguns parâmetros definidos e explicados na Seção 5, e ao final, será apresentada uma conclusão sobre o estudo. 2. RUNES RUNES (Reconfigurable, Ubiquitous, Networked Embedded Systems) é um projeto que visa criar uma arquitetura de uma plataforma de desenvolvimento para sistemas embarcados em rede. Essa arquitetura abrange camadas de rádio dedicadas, suporte a redes, um middleware e ferramentas específicas para verificação e simulação de software [2]. A plataforma de programação, que é o núcleo dessa arquitetura, é formada por um middleware baseado em componentes que separa e encapsula funcionalidades providas pelos seus diversos componentes através de interfaces bem definidas. Essa separação de funcionalidades presentes no middleware, não apenas permite o desenvolvimento de variantes de um mesmo componente, como também permite a reconfiguração dinâmica de instâncias de componentes e suas interconexões. Essas características permitem a adaptação dinâmica da plataforma de acordo com o contexto no qual ela está inserida, o que é um requisito fundamental para ciência de contexto [2]. Uma característica do RUNES (middleware) é envolver funções que tipicamente são consideradas da camada de rede e do sistema operacional. Dessa forma o RUNES é capaz de prover acesso unificado à configuração, desenvolvimento e reconfiguração em diversos níveis de abstração. A abordagem do projeto considera a construção do middleware através de uma linguagem de modelo de componentes, independente de qualquer modelo de componentes concreto, e oferecer um conjunto de APIs genéricas para que tal middleware seja utilizado. Essas APIs genéricas são interfaces abstratas, por isso a implementação delas pode ser feita posteriormente. Fica a cargo do programador escolher a melhor forma de implementar as operações das quais a API se propõe a cumprir, bem como a linguagem de programação a ser utilizada. Por exemplo, o middleware pode definir a API enviar( menssagem, remetente, destinatário ). Em um PDA com um sistema operacional convencional, essa interface pode ser implementada utilizando classes da linguagem Java, ou no caso de um sistema operacional Linux utilizando shared objects desenvolvido na linguagem C, enquanto que em um microcontrolador de um nó sensor, os componentes podem ser implementdos simplesmente como segmentos de código de máquina. Assim todos os dispositivos implementam a mesma interface de formas diferentes, pois o modelo de componentes é local e dependente do dispositivo. O modelo genérico de componentes introduzido pelo RUNES é o apresentado na ilustração a seguir, ele se baseia no Lancaster’s OpenCOM. Os elementos do modelo de componentes são: componentes, cápsulas, interfaces, receptáculos e ligações. Componentes são unidades encapsuladas de funcionalidade ou de desenvolvimento, que interagem com outros componentes exclusivamente através de interfaces ou receptáculos. Cápsulas são entidades que abrangem os elementos do modelo de componentes; é através delas que são oferecidas as APIs de execução. Assim, as cápsulas podem ser implementadas diferentemente em diferentes dispositivos. Interfaces são expressas em termos de grupos de assinaturas e tipos de dados. Receptáculos são interfaces requeridas que são usadas para explicitar as dependências de um componente. As ligações são associações entre interfaces simples e receptáculos. [2]. Figura 1 – Elementos do Modelo de Componentes do RUNES Esse modelo pode ser complementado por mais duas arquiteturas de elementos: component frameworks e reflective meta-models. Um component framework (CF) é uma composição de componentes encapsulado, cuja finalidade é tratar de uma determinada área ou funcionalidade do sistema. Essa composição também deve aceitar componentes adicionais (plugins) que modificam ou estendem o comportamento de um determinado CF. Cada CF deve oferecer um conjunto de APIs genéricas para permitir sua utilização. Alguns exemplos de CFs são: Serviços locais do sistema operacional: esse CF é responsável por prover funcionalidades, implementadas por grupos de plug-ins, geralmente oferecidas por sistemas operacionais locais como: políticas de escalonamento, gerenciamento de memória e protocolos MAC. Cada plug-in de um grupo implementa diferentes versões das funcionalidades oferecias por seu grupo. Por exemplo, no grupo de políticas de escalonamento, cada plug-in poderia implementar uma politica diferente; Serviços de rede: Possuem diversos plug-ins de forma que o objetivo de cada um deles seja implementar uma tecnologia de rede específica. Aqui devem ser implementados protocolos para redes adhoc e redes infra-estruturadas. O CF deve disponibilizar APIs genéricas para serem utilizadas por desenvolvedores, como: send(message,address), para unicast; sendToAll(message) para broadcast e sendToGroup(message, topic) para multicast. Serviços de localização: esse CF deve ser responsável por conhecer ou obter a posição física ou lógica do dispositivo host, no qual ele está implantado. Ele poderia implementar um plug-in que obtivesse dados de localização diretamente de um sensor GPS presente no dispositivo, ou poderia implementar um plug-in que interagisse com outros nós equipados com sensors GPS. Alguns outros exemplos de CF são: serviços de descoberta e notificação e serviços de coordenação. As vantagens de utilizar CF’s são: Eles provêem uma abstração intermediária entre os componentes e todo o sistema, dessa forma, essa abstração permite aumentar a compreensibilidade e a mantenabilidade do sistema; Eles simplificam o desenvolvimento de componentes, devido ao reuso de outros componentes e ao direcionamento do foco de um CF; e Eles dão suporte ao compartilhamento de componentes leves (lightweight), chamados de plug-ins, que atuam modificando as funcionalidades de um CF. A finalidade da reflexão é estabelecer e manipular meta-modelos de sistemas, que estão conectados de forma causal. Tais meta-modelos são representações de alguns aspectos ou visões de um sistema, e eles disponibilizam as chamadas meta-interfaces, através das quais a representação do sistema, ou parte dele, pode ser inspecionada ou manipulada. O maior benefício do uso da reflexão é separar de forma arquitetural a construção do sistema (ou configuração), da adaptação do sistema (ou reconfiguração). O objetivo do RUNES é desenvolver meta-modelos reflexivos conectados aos CFs. A idéia é que CFs possam encapsular meta-interfaces, e controlar os acesso a elas. Além disso, tal encapsulamento também pode garantir que as metainterfaces serão acessadas apenas em condições adequadas. Por exemplo, um CF pode restringir a substituição de componentes de um sistema, seguindo um metamodelo arquitetural (construído para um sistema visando à substituição de seus componentes), às situações onde nenhuma invocação está sendo feita ao antigo componente. Além disso, um CF pode implementar um protocolo para transmitir o estado de execução, do componente substituído para o novo. 3. MicroQoSCORBA MicroQoSCORBA é um middleware, projetado como um framework, e que possui adicionalmente um toolkit de suporte ao desenvolvimento, que pode ser utilizado em dispositivos com poucos recursos de memória. Seu principal objetivo é a flexibilidade para sofrer adaptações direcionadas a atender propriedades específicas de hardware, tais como baixa capacidade de processamento e pouca disponibilidade de memória, assim como requisitos de configuração de aplicações. MicroQoSCORBA, ele foi desenvolvido para dar apoio a diversas propriedades de QoS, tais como: tolerância a falha, segurança e comportamento em tempo-real (responsividade). Sua capacidade de atender uma grande diversidade de dispositivos embarcados se deve à exploração dos recursos individuais de cada dispositivo, assim como a utilização de adaptações na arquitetura padrão CORBA. A maior parte das adaptações feitas no MicroQoSCORBA são baseadas em determinadas escolhas feitas pelo arquiteto do sistema durante a fase de projeto da aplicação. Em seguida, esses parâmetros de configuração são encaminhadas para o compilador IDL do MicroQoSCORBA, que se encarrega de gerar os componentes correspondentes. Figura 2 – Arquitetura do MicroQoSCORBA Como em todos os ambiente de desenvolvimento CORBA, há um compilador IDL, que é responsável por processar os arquivos IDL da aplicação e produzir os códigos dos stubs e esqueletos. No caso desse middleware, houve a necessidade de alterar o compilador IDL padrão, para que este não gere objetos com um tamanho convencional, em termos de memória, pois isso seria inapropriado para dispositivos com capacidade restrita de memória. Portanto, para solucionar esse problema, o compilador IDL do MicroQoSCORBA, gera stubs e esqueletos de código que são otimizados e configurados para usar determinadas implementações customizadas de ORBs e POAs (Portable Object Adapter) especificadas pelo desenvolvedor na fase inicial do projeto de uma aplicação de sistema embarcado. Muitas alterações podem ser feitas apenas nos códigos de stubs e esqueletos para reduzir (ou aprimorar) o uso de recursos de uma determinada aplicação. Os aperfeiçoamentos posteriores devem ser feitos otimizando as implementações de ORBs. Devido à fina granularidade do projeto e implementação do MicroQoSCORBA, este dá suporte à diversas configurações e otimizações de ORBs, cada uma com seu perfil de uso de recursos e performance. Muitas das implementações especializadas de ORBs mantém uma boa interoperabilidade com outras implementações-padrão de ORBs. No entanto, em determinados casos, o desenvolvimento precisa abrir mão da interoperabilidade, em troca de atender requisitos específicos da plataforma de software e do hardware. Como a capacidade de comunicação de um dispositivo embarcado é restrita, e há a necessidade de camadas de comunicação bastante leves, o MicroQoSCORBA faz com que no lado do cliente, os stubs gerados pelo IDL possuam referências para diversos protocolos e camadas de transporte que podem ser usados dependendo da sua disponibilidade em dispositivos em questão (Figura 2). As escolhas dessas referências são enviadas para os ORBs, de forma que mensagens possam ser enviadas ou recebidas devidamente. Inicialmente, o middleware suportava o IIOP, um protocolo baseado em TCP/IP e que inclua muito código, e dependendo mais da aplicação do que do código da própria aplicação [2]. O middleware também implementa um suporte ao UDP. Além desses protocolos, o MicroQoSCORBA também usa subconjuntos de protocolos de comunicação padrão do CORBA considerados leves. Tais subconjuntos são resultados de escolhas de projeto que irão permitir a remoção de funcionalidades desnecessárias, tais como: tratamento de mensagens desnecessárias, tipos de dados extensos e exceções. No MicroQoSCORBA é possível prover serviços com diferentes níveis de qualidade (QoS). Portanto, o middleware oferece suporte à requisitos de QoS relativos a tolerância à falha, segurança e responsividade. Portanto, em cada um desses subsistemas, há algumas implementações de diferentes mecanismos de QoS, que oferecem serviços que permitam balancear entre QoS e consumo de recursos, como: cifragem de dados versus latência ou latência versus gerenciamento de energia. No subsistema de tolerancia à falha, há mecanismos de redundância temporal (onde k mensagens podem ser omitidas) e redundância de valor (através do CRC32, que é anexado à mensagem) que podem ser usados. No subsistema de segurança há o mecanismo baseado em confidencialidade (os canais de informações e os canais de comandos podem ser separados em redes diferentes) [2]. Para auxiliar o desenvolvedor no projeto e configuração de suas aplicações, o MicroQoSCORBA conta com diversas ferramentas. Dentre elas há uma ferramenta de configuração baseada em GUI, um gerador de código IDL, a ferramenta make, ferramentas de desenvolvimento Java, ferramentas para o hardware de dispositivos específicos e um processador de macros (m4). As macros são usadas no ambiente de desenvolvimento para esconder algumas diferenças entre a versão padrão Java e versão do Java móvel. Elas também permitem um mecanismo leve para encapsular mecanismos de QoS do MicroQoSCORBA. 4. OCP O OCP (Open Control Platform) é um componente de tecnologia de software importante para o programa de pesquisa SEC (Software Enabled Control) financiado pelo DARPA (United States Defense Advanced Research Projects Agency). O maior objetivo do SEC é desenvolver uma nova tecnologia de software que permita novas aplicações de controle que são intratáveis usando as metodologias atuais. Na prática, O OCP é uma infraestrutura de software orientado a objetos que foi projetada para analisar, desenvolver e testar algoritmos de controle para UAVs (Uninhabited Aerial Vehicles) e sistemas de software embarcado. Essa plataforma inclui um middleware, projetado como um framework, para integrar componentes de aplicações de sistemas embarcados com serviços importantes para o domínio de controle de UAVs; um simulador, projetado como um framework, para simulações de software de UAVs e que se integra com outros simuladores; e uma ferramenta para integração com ferramentas de projeto e análise de sistemas embarcados. Para conseguir resolver alguns desafios como: o convívio com sistemas híbridos, controle multi-modal e requisitos de tempo real relacionados ao controle de vôo de baixo nível, o middleware OCP, optou por utilizar a arquitetura do realtime common object request broker (RT CORBA) em sua implementação. O OCP tem sua herança num software financiada pela Boeing, baseado em CORBA, chamado de Bold Stroke. Esse software foi inicialmente desenvolvido na Boeing com o intuito de fornecer uma abordagem de linha de produção para o desenvolvimento de software de aviônica para os caças produzidos pela McDonell Douglas Corporation. O foco do Bold Stroke era restrito à classe de aplicações de sistemas embarcados chamada de Mission Computing. Essa classe de sistemas trata de tarefas realizadas a bordo, tais como: navegação, interface piloto-veículo (PilotVehicle Interface - PVI) e controle de armas. Porém, o middleware não foi usado para o processamento do gerenciamento de veículos, onde controles de vôo críticos são implementados. Portanto, um dos objetivos do OCP é permitir o desenvolvimento de software para suportar todos os níveis de controle de vôo de UAVs. O middleware pode ser usado para integrar componentes de aplicações de sistemas embarcados, controlando sua execução e comunicação. O ambiente de simulação permite que as aplicações executem e sejam testadas em um mundo virtual, onde é possível efetuar a leitura de sensores simulados e simular pilotos. A ferramenta de integração provê a possibilidade de ligação com importantes ferramentas de análise e projeto, como o Matlab/Simulink e o Ptolemy II, permitindo que o controle de projetos feitos nessas ferramentas seja facilmente transformado em aplicações de sistemas embarcados que usam o middleware OCP. A seguir segue uma ilustração da arquitetura do Bold Stroke e não do OCP, pois esse último se encontrava em fase de construção (na época que o artigo foi produzido). Porém, o OCP pretende implementar as seguintes características, além das já providas pelo Bold Stroke: escalonamento dinâmico, gerenciamento de recursos adaptativo, reconfiguração dinâmica, suporte a sistemas híbridos, e acesso facilitado a gatilhos (triggers) de tempo real, sensores e atuadores (simulação de pilotos). Figura 3 – Arquitetura do Bold Stroke O OCP é um middleware que está sendo escrito na linguagem de programação C++. Ele inclui um componente RT CORBA que usa o ACE (Adaptative Communication Environment) e o TAO (The ACE ORB), esse último responsável por prover uma extensão de tempo real para o CORBA. Ainda sobre o ACE e o TAO, algumas extensões de tempo real foram desenvolvidas pela Boeing para serem utilizadas nas aplicações de sistemas embarcados do tipo Gerenciamento de Missões (Mission Management) de seus caças. Para aplicar as características do CORBA no domínio das aplicações críticas de tempo real de aviões-caça, o software Boeing Bold Stroke, utilizou as extensões de tempo real do TAO. Diversas inovações estão sendo implementadas ao middleware que usa ACE/TAO para aplicações de gerenciamento de missões em caças. Essas inovações são necessárias para os desafios de controle de vôo de baixo nível e para suportar as técnicas de controle de atalhos que sobrecarregam os recursos do computador de bordo do veículo. As inovações são: implementação do escalonamento dinâmico e gerenciamento de recursos adaptativo em um framework de gerenciamento de recursos, suporte a sistemas híbridos e suporte para gatilhos de tempo precisos no nível de aplicação. 5. Comparação dos Middlewares Nesta seção serão comparados os middlewares apresentados, em relação a determinados parâmetros: área de aplicação, maturidade, classificação de tempo real, paradigma de programação, tolerância à falhas, heterogeneidade, interoperabilidade, adaptação dinâmica, extensibilidade, ferramentas de simulação, ambientes de execução e usabilidade. A seguir será apresentada uma lista com todos os parâmetros, que servem de base para a comparação entre os middlewares, e a descrição do cada um deles representa. Área de aplicação: refere-se à área para qual o middleware foi projetado ou a área na qual ele se destacou sendo utilizado ou testado; Maturidade: refere-se ao tempo de uso do middleware em um cenário real, que não seja apenas um ambiente de testes; Classificação de tempo real: refere-se à classificação do middleware como um sistema de tempo real suave (soft) ou rígido (hard); Paradigma de programação: refere-se ao padrão de técnicas que foram utilizados na implementação ou que são disponibilizadas pelo middleware; Tolerância à falhas: refere-se aos mecanismos que o middleware possui para tolerar certos tipos de falhas; Heterogeneidade: refere-se ao número de plataformas no qual o middleware pode ser implantado sem ser modificado; Interoperabilidade: refere-se à facilidade que o middleware tem para se comunicar com outros sistemas; Adaptação dinâmica: refere-se à capacidade do middleware se adaptar dinamicamente (em tempo de execução) a quaisquer tipos de mudança; Extensibilidade: refere-se à facilidade com que podem ser agregadas novas funcionalidades ao middleware; Ferramentas de simulação: refere-se às ferramentas de simulação que o middleware disponibiliza para testar suas aplicações; Ambiente de execução: refere-se aos ambientes de execução no qual o middleware foi usado; e Usabilidade: refere-se à facilidade que um desenvolvedor tem para utilizar o middleware. 5.1. Avaliação do RUNES Área de aplicação: Não há uma área específica definida, porém seus testes se voltaram para a área civil, permitindo a coordenação de equipes para o combate a incêndios. Maturidade: A maturidade do sistema é baixa. O grupo trabalhou na implementação das API’s do middleware sobre o sistema operacional Contiki, voltado para redes de sensores. Dessa forma seria possível validar nesse teste a viabilidade do uso do RUNES em ambientes com recursos escassos. O grupo também trabalhou para usar o RUNES em um ambiente de teste no cenário de combate a incêndios, onde são utilizados pelo menos três tipos de dispositivos: nós sensores, PDAs e computadores do tipo estações de trabalho. Classificação de tempo real: Pelo que pude avaliar no middleware, parece ser do tipo soft, pois o cenário mais crítico no qual ele foi testado refere-se ao combate de incêndios, o que imagino que seja permitido alguma margem mínima de atraso no sistema. Paradigma de programação: No RUNES define-se o modelo de componentes e a implementação pode ser feita utilizando qualquer linguagem de programação. Porém se utilizam técnicas de frameworks e reflexão computacional. Tolerância a falhas: Não há nenhum mecanismo pré-definido, porém podem ser criados através dos CF’s e dos meta-modelos reflexivos. Heterogeneidade: É atingida devido à abstração do middleware. Depois de definidas as interfaces, a linguagem de programação a ser utilizada fica a cargo do desenvolvedor Interoperabilidade: A interoperabilidade é atingida devido a utilização do modelo de componentes, pois as interfaces são bem definidas e independentes de uma linguagem de programação específica. Adaptação dinâmica: É permitida a reconfiguração dinâmica dos componentes e suas interconexões. Extensibilidade: Através dos component frameworks e dos meta-modelos, é possível estender, sempre que desejado, as funcionalidades do middleware definindo novos CF’s. Ferramentas de simulação: Utiliza o TrueTime, uma ferramenta baseada no MatLab. Ambiente de execução: Dispositivos utilizando o sistema operacional Contiki. Usabilidade: Deve-se saber utilizar o modelo de componentes OpenCOM de Lancaster e no mínimo uma linguagem de programação de escolha do desenvolvedor para implementar os CF’s. Também é necessário conhecer reflexão computacional. 5.2. Avaliação do MicroQoSCORBA Área de aplicação: Genérica, o sistema ainda não se dedicou a uma área específica. Maturidade: Pouca. Classificação de tempo real: Esse sistema parece ser um sistema de tempo real do tipo hard, pois suas preocupações com QoS (tolerância à falhas, segurança e responsividade) demonstram tal comportamento. Paradigma de programação: Esse middleware utiliza CORBA, portanto não há um paradigma de programação previamente definido, pois não há uma linguagem de programação definida. Tolerância a falhas: O middleware provê mecanismos de tolerância à falhas. Os mecanismos implementados foram de redundância temporal, redundância espacial, redundância de valor, detecção de falhas e comunicação de grupo. Heterogeneidade: Através desse middleware é possível adequar aplicações para determinados requisitos de hardware e software. Um fator muito importante para isso é o uso de CORBA. Interoperabilidade: A interoperabilidade é atingida através do uso do CORBA, que possui bindings (interfaces) para várias linguagens. Adaptação dinâmica: É possível que sejam feitas adaptações dinâmicas. Extensibilidade: A extensibilidade é facilitada. Para prover novas soluções otimizadas para o middleware é necessário alterar o compilador IDL. Ferramentas de simulação: Não foi encontrada a ferramenta de simulação do toolkit do sistema. Ambiente de execução: Placas TINI da Dallas Semiconductor, placas SaJe da Systronix e plataformas Linux x86. Todas as plataformas possuíam Java Virtual Machines, já que o protótipo testado foi construído na linguagem de programação Java. Usabilidade: Deve-se saber utilizar o compilador IDL da arquitetura e a arquitetura CORBA. 5.3. Avaliação do OCP Área de aplicação: Militar, voltado para controle de veículos aéreos de combate não-tripulados (UCAV). Maturidade: A maturidade do sistema é muito alta. Pois o Bold Stroke (a base do OCP, financiado pelo DARPA e pela USAF) já é utilizado nos softwares de aviônica de UCAVs. Classificação de tempo real: Esse middleware pode ser considerado um sistema de tempo real hard, por ser voltado para o controle de veículo aéreos. Paradigma de programação: O paradigma de programação é orientado a objetos. O middleware foi construido usando C++. O middleware inclui um componente RT CORBA, que permite o uso do ACE e TAO. Tolerância a falhas: Não há mecanismos explícitos Heterogeneidade: A heterogeneidade é atingida nesse middleware. Na fase de testes do OCP, ele foi implantado em um UAV e um avião-caça guiado por um piloto. Através do OCP foi possível a comunicação entre os sistemas dos dois veículos aéreos [3]. Porém não são todas as plataformas que podem suportar todos os recursos da linguagem C++. Interoperabilidade: A interoperabilidade não parece ser atingida de uma forma tão ampla, uma vez que o middleware foi implementado usando a linguagem C++. Adaptação dinâmica: É possível que sejam feitas adaptações dinâmicas, acoplando novos subsistemas na forma de plug-ins. Extensibilidade: Sua extensibilidade não é tão grande, pois aqui deve-se extender classes utilizando a linguagem C++. Para adicionar funcionalidades aos mecanismos que tratam do comportamento de tempo real do middleware, deve-se alterar funcionalidades oferecidas pelos objetos ACE/TAO do RT CORBA. Ferramentas de simulação: Utiliza o Simulink. Ambiente de execução: Os ambientes iniciais apena para um pré-teste foram o Windows NT e Linux. Posteriormente na fase de testes reais, foram utilizados os sistemas operacionais VxWorks e QNX, que são sistemas POSIX de tempo real. Usabilidade: Deve-se ter domínio da linguagem de programação C++ e saber utilizar o RT CORBA (ACE/TAO). A seguir é apresentada a tabela com o resumo da avaliação dos middlewares, baseado em seus parâmtros. OCP Área de aplicação MicroQoSCORBA RUNES Controle de veículos aéreos Combate Genérica não-habitados (seus sistemas) Maturidade Classificação de tempo real Paradigma Tolerância Falhas Heterogeneidade à (primeiro teste feito) Baixa Média Hard Hard Soft objetos programação incêndios Alta de Orientado a a Frameworks ORB Reflexão Computacional Ausente Presente Ausente Média Média-Alta Alta e Interoperabilidade Baixa Adaptação dinâmica Extensibilidade Ferramentas Alta Alta Presente Presente Presente Baixa Alta Alta Ausente TrueTime de Simulink Simulação Nos Ambientes Execução sistemas No de operacionais: sistema No sistema operacional Linux e operacional Windows, Linux, nas placas SaJe e Contiki VxWorks e QNX TINI (sensores) Difícil (Framework, Usabilidade Fácil (C++) Média (CORBA) Reflexão Computacional, OpenCOM) Tabela 1: Resumo das Comparações dos Middlewares 6. Conclusão Esse capítulo de conclusão será destinado aos pareceres finais da comparação dos middlewares, feitos através dos parâmetros do capítulo anterior. O primeiro fator a ser avaliado é a arquitetura dos middlewares, o segundo é a qualidade de serviço provida e o terceiro a confiabilidade. Em cada um desses fatores será apresentado o middleware que melhor atende o fator. O primeiro fator a ser descrito é a arquitetura de cada middleware. Nesse foco, o destaque é o RUNES. Pois sua capacidade de trabalhar em uma camada abstrata o torna um opção muito boa para os sistemas embarcados. Cabe lembrar que ele utiliza o modelo de componentes para definir apenas as interfaces entre os componentes. Ele também utiliza os chamados Component Frameworks para automatizarem e encapsularem áreas funcionais do middleware. Ele é flexível o bastante para permitir que novas funcionalidades sejam alteradas em tempo de execução apenas acoplando novos plug-ins aos CF’s, ou agregando e desagregando componentes. Ele também utiliza a reflexão computacional, permitindo que o sistema possa ser alterado de uma forma mais concisa e automatizada, evitando erros comuns de desenvolvedores. No caso do OCP, por mais que ele utilize componentes RT CORBA (ACE/TAO), o middleware foi implementado em C++ e sua arquitetura já é previamente definida. Devido a essa característica o middleware perde um pouco de flexibilidade em comparação ao RUNES. Já no caso do MicroQoSCORBA, ele é mais flexível que o OCP, pelo fato de utilizar CORBA, porém ainda assim é considerado inferior ao RUNES por não possuir um modelo dinâmico, como a reflexão computacional, para permitir a configuração automática do sistema. Além disso ele também não conta com o modelo de Component Frameworks, onde pode-se criar mecanismo de controle direcionados para determinadas áreas apenas com a composição de componentes. O segundo fator é a qualidade de serviço. Quanto a essa perspectiva, é incontestável a vantagem do MicroQoSCORBA em relação aos outros middlewares, pois ele é o único dos três que se preocupa explicitamente com requisitos não-funcionais como: tolerância à falhas, segurança e responsividade, de uma forma ampla. Nem mesmo o OCP, que é um middleware voltado para aplicações realmente críticas, menciona suas preocupações quanto à QoS, abertamente, em sua arquitetura como o MicroQoSCORBA. Certamente, o OCP implementa mecanismo de forma otimizada para permitir que os serviços sejam realizados da melhor forma possível, porém nada a ponto de se comparar a uma adaptação dinâmica para permitir diferentes níveis de serviços. O terceiro fator é a confiabilidade e maturidade do middleware. Nesse quesito, o OCP é superior a todos os outros. Sua base (o middleware Bold Stroke), foi usado nos aviões-caça produzido pela McDonnell Douglas Corporation para controlar todos os sistemas do avião, com exceção do chamado gerenciamento de veículo. Seu foco (OCP) agora está na implantação de todos os sistemas, incluindo o gerenciamento do veículo, dos chamados UCAVs. Por mais que alguns testes tenham sido executados no RUNES e no MicroQoSCORBA, eles ainda não estão tão operacionais e não foram testados em situações tão reais quanto o OCP, como na demonstração de um ataque coordenado entre um aviãocaça e um UCAV, que recebe sua missão em pleno vôo pelo piloto do caça, que está coordenando o ataque. Todos os middlewares representam plataformas que fornecem serviços abstratos para os desenvolvedores de aplicações, facilitando o desenvolvimento das mesmas, já que não há a preocupação de se programar para uma plataforma específica. Porém no caso dos sistemas embarcados, fica difícil oferecer uma abstração única para os desenvolvedores, já que as plataformas são muito diferentes. Dessa forma, seria necessário que o middleware soubesse lhe dar com uma diversidade muito grande de hardwares. Devido a esse problema, pôde-se notar que todos os middlewares, com exceção do OCP, são definidos de tal forma que detalhes de implementação não são tratados. O MicroQoSCORBA, por exemplo, se preocupa em otimizar o código de objetos CORBA, postergando a instanciação do framework. O RUNES é o mais abstrato de todos, pois ele apenas define as interfaces (independentes de plataforma) e recomenda algumas funcionalidades que devem ser oferecidas (através dos CFs). O único middleware que é uma plataforma previamente implementada para fornecer serviços abstratos é o OCP, que está direcionado para os sistemas operacionais descritos anteriormente e encontra-se implementado em C++. 7. Referências [1] P.Costa, G. Coulson, C. Mascolo, G. Picco, S. Zachariadis. The RUNES Middleware: A Reconfigurable Component-based Approach to Networked Embedded Systems. 2005. [2] A. McKinnon, K. Dorow, T. Damania, O. Haugan, W. Lawrence, D. Bakken, J. Shovic. A Configurable Middleware Framework with Multiple Quality of Service Properties for Small Embedded Systems. 2003. [3] J. Paunicka, B. Mendel, D. Corman. The OCP - An Open Middleware Solution for Embedded Systems. 2001.