• Nenhum resultado encontrado

Aplicação dos Mecanismos de Gestão de Variabilidade

No documento Framework generativa para edge devices (páginas 57-62)

2.4 Mecanismos de Gestão de Variabilidade

2.4.6 Aplicação dos Mecanismos de Gestão de Variabilidade

Nesta secção são apresentadas algumas aplicações dos mecanismos de gestão de variabilidade em sistemas embebidos de poucos recursos. Apenas são apresentadas aplicações que utilizem AOP ou TMP. Aplicações com os outros mecanismos não são abordadas, visto que o polimorfismo dinâmico não é aplicado neste tipo de sistemas, e a compilação condicional é utilizada com abundância, muito conhecida, mas de difícil compreensão e manutenção.

Programação Orientada a Aspetos:

Nesta secção é mostrada uma aplicação, que utiliza programação orientada a aspetos para gerir a variabilidade de aplicações suportadas por sistemas embebidos com poucos recursos.

”Developing Embedded Software Product Lines with AspectC++”: Neste

artigo, Lohmann and Spinczyk [5], em 2006, efetuaram a comparação entre três meca- nismos de gestão da variabilidade de código: Programação Condicional em linguagem C, Programação Orientada a Objetos (OOP) em linguagem C++ e Programação Ori- entada a Aspetos (AOP) em linguagem AspectC++. No artigo, demonstram que a AOP tem grandes potencialidades relativamente aos outros mecanismos, no desen-

volvimento de aplicações de sistemas embebidos, com recursos limitados de memória de código/dados e processamento.

Os autores seguem a metodologia SPL (o diagrama de funcionalidades está pre- sente na figura 2.10) para criar (from scratch) uma central meteorológica, preparada para correr num pequeno microcontrolador de 8 bits (AVR ATmega). Os objetivos deste exemplo, são: demonstrar que a AOP é aplicável a sistemas embebidos, em geral; comprovar que é acessível, no que diz respeito ao consumo de recursos do có- digo gerado; e por fim, mostrar que é utilizado nos dias de hoje, uma vez que, são disponibilizadas ferramentas de desenvolvimento no mercado, com um alto nível de maturidade.

Figura 2.10: Diagrama de funcionalidades da estação meteorológica [5]

A figura 2.11, apresenta um gráfico comparativo entre os três mecanismos de gestão da variabilidade de código: Programação Condicional em linguagem C, OOP em linguagem C++ e AOP em linguagem AspectC++. Os gráficos mostram o con- sumo de memória RAM e Flash em distintas configurações da estação meteorológica. Nestes gráficos, pode ser comprovado que, claramente, a OOP consome bastante mais memória comparativamente às outras duas abordagens. Em relação à compa- ração entre o AOP e a programação condicional em C, o segundo apresenta melhores

resultados. Contudo, a AOP é uma programação mais legível que a programação condicional.

Figura 2.11: Comparação do footprint entre programação condicional, OOP e AOP [5]

Template Metaprogramming:

Nesta secção são mostradas duas aplicações que utilizam template metaprogram-

ming para gerir a variabilidade de aplicações suportadas por sistemas embebidos com

poucos recursos.

”C-MAC: a Configurable Medium Access Control Protocol for Sensor Networks”: Steiner et al. [32], em 2010, desenvolveram uma camada MAC (Medium

a C-MAC os programadores podem instanciar protocolos MAC que satisfaçam as ne- cessidades da sua aplicação. Para conseguirem essa grande liberdade de configuração, o C-MAC foi escrito recorrendo a técnicas de meta-programação estática C++, pois estas técnicas não comprometem o tamanho do código gerado nem a performance da aplicação.

Segundo os autores, as WSNs estão altamente dependentes de um eficiente protocolo MAC que faça uso dos poucos recursos presentes numa WSN como: baixa largura de banda e baixos recursos de energia, mas também limitações de memória e processamento dos nós da rede. O C-MAC dá liberdade aos programadores para configurar muitos parâmetros de comunicação, ajustando o protocolo às necessidades das suas aplicações sem comprometer as limitações apresentadas anteriormente.

Os autores comparam o C-MAC com o IEEE 802.15.4 MAC ZigBeeNet produ- zido pela empresa Meshnetics, e afirmam que a implementação em meta-programação C++ apresenta funcionalidades equivalentes com baixo footprint. As técnicas de meta-programação estática utilizadas foram: templates, funções inline e inline assem-

bly. Uma vez que, não afetam a performance nem o tamanho do código produzido.

Exploiting Template Metaprogramming to Customize an Object-Oriented Operating System: Pinto et al. [6], em 2013, indicam que hoje em dia, o cresci-

mento da complexidade dos sistemas embebidos exige configurabilidade, variabili- dade e reutilização. A compilação condicional e programação orientada a objetos são as duas abordagens mais utilizadas para gestão da variabilidade. Enquanto que a primeira aumenta a complexidade da manutenção do código, a segunda insere modu- laridade e adaptabilidade necessária para simplificar o desenvolvimento de software reutilizável e customizável, contudo, deteriora a performance e o consumo de memó- ria.

Como alternativa aos dois métodos apresentados, os autores propõem a uti- lização de C++ template metaprogramming, pois alegam que o TMP não afeta a

performance do sistema, nem consome muitos recursos de memória. Isto porque, a

gestão da variabilidade do TMP é feita estaticamente, gerando apenas as funcionali- dades desejadas, garantindo assim, que o código é otimizado e ajustado aos requisitos das aplicações e recursos de hardware.

Como cenário de teste, os autores aplicaram o mecanismo de TMP à gestão de variabilidade de um sistema operativo em tempo real (RTOS) orientado a objetos (ADEOS [33]).

De modo a expressar o grau de variabilidade do RTOS ADEOS, os autores optaram por utilizar um diagrama de funcionalidades, pois afirmam que permite expressar graficamente a variabilidade do sistema, desconsiderando o mecanismo de implementação. Esse diagrama pode ser visualizado na figura 2.12.

Figura 2.12: Diagrama de funcionalidades do RTOS ADEOS [6]

A plataforma alvo utilizada para correr o RTOS ADEOS foi um microcontrola- dor de poucos recursos, um Atmel 8051 (AT89C51). As ferramentas de programação utilizada foram as contidas no pacote do IAR Embedded Workbench 8051 (compilador e debugger). O debugger foi utilizado para obtenção das informações de execução da aplicação.

Para avaliar o desempenho da implementação, os autores fizeram a comparação entre uma gestão de variabilidade implementada em polimorfismo dinâmico com uma implementação em TMP.

Segundo as simulações realizadas pelos autores, através de TMP foi conseguido um tempo de execução de menos 20% e um consumo de menos 40% de memória de código em relação à implementação com polimorfismo dinâmico. Contudo, a implementação em TMP apresenta mais 8% de linhas de código e mais 41% de classes

que a implementação em polimorfismo dinâmico. O que significa que a implementação em TMP permite um grau de modularidade e encapsulamento mais alto que o código implementado em polimorfismo dinâmico, possibilitando melhor gestão, manutenção e reutilização do código.

Com a comparação dos resultados, os autores concluíram que a abordagem TMP apresenta vantagens em termos de performance e consumo de memória, comparando com a abordagem da programação orientada a objetos tradicional.

No documento Framework generativa para edge devices (páginas 57-62)

Documentos relacionados