Com o desenvolvimento tecnológico que se tem assistido ao longo dos últimos anos, os sistemas embebidos acabaram por se tornar cada vez mais comuns. Desde simples aparelhos como televisões, leitores MP3 e routers, até sistemas complexos como os de orientação de mísseis, os sistemas embebidos são parte do nosso quotidiano.
Através de tecnologias de compilação do Linux partindo das fontes, vulgarmente designado por "Linux from scratch", é possível desenvolver uma distribuição customizada do Linux, que responde de forma específica a cada uma das restrições do sistema a desenvolver. O Linux, com a sua filosofia de distribuição ''one-size-fits-all'' tornou-se uma alternativa viável, fornecendo um vasto suporte de hardware, técnicas avançadas de depuração, suporte de rede, entre outros serviços, que se tornaram no conjunto standard de requisitos observado na maioria dos sistemas embebidos atuais. A escolha deste sistema operativo, quando comparado com outros SO de micro-kernel, é favorecida pelo facto de este ser open-source e possuir um vasto conjunto de bibliotecas de software que permitem ao utilizador-programador desenvolver uma aplicação específica para um determinado domínio.
Alguns destes sistemas têm como alvo aplicações que requerem uma intensa troca de dados em tempo-real, como por exemplo: controlo de tráfego aéreo, gestão de redes elétricas inteligentes e aplicações de big-data, o que pode causar um impacto significativo na performance do sistema e nos recursos consumidos.
Para solucionar este problema o Object Management Group (OMG) desenvolveu uma infrastrutura que visa permitir uma troca de dados de alto desempenho e em tempo-real, o Data Distribution Service. Este MOM-based Middleware (Message Oriented) é um software que presta às aplicações serviços adicionais aos fornecidos pelo SO e assenta num padrão Publish-subscribe, permitindo uma maior escalabilidade. Trocas de dados a este nível podem causar um bottleneck no CPU e uma drástica redução do desempenho do sistema, devido ao elevado número de cópias de dados e tempo gasto a alternar entre User-Space e Kernel-Space. Algumas versões de SO implementam operações de Zero-Copy recorredo a: técnicas de cópia baseadas em DMA (Direct Memory Access) e mapeamento de memória com o uso do MMU (Memory Management Unit), com o fim de eliminar cópias desnecessárias e reduzir o footprint de memória no sistema.
Esta dissertação propõe-se por isso ao desenvolvimento de um Middleware para transferência de dados entre aplicações hardware e software, utilizando requisitos Zero-Copy. Este Middleware irá operar ao nível do kernel do Linux e irá refatorizar as regiões de memória existentes no sistema. Na sua implementação, irá recorrer à combinação das tecnologias de aceleração de sistemas: paralelização e execução em hardware especializado, fornecendo uma implementação que promove o alcance de restrições como temporização e consumo de recursos nos diferentes níveis: hardware e software.
Capazes de realizar diversas tarefas complexas, a utilização dos sistemas embebidos tem vindo a crescer em diversas indústrias. Assim sendo, o design deste tipo de sistemas para plataformas multicore e com processamento paralelo dedicado passou a ser uma opção viável. No entanto, a criação de aplicações híbridas requer conhecimentos avançados das técnicas de aceleração por hardware, um enorme esforço de desenvolvimento e um custo elevado.
Assim sendo, é necessário a criação de sistemas capazes de facilitar e suportar este tipo de design. De maneira a reduzir o tempo de desenvolvimento e a aumentar a performance das aplicações híbridas, este programa propõe a criação de um sistema capaz de:
Recorrendo a técnicas puramente de software, desenvolver um Middleware que opere ao nível do kernel do SO Linux e que seja capaz de fornecer os serviços pretendidos à camada aplicacional;
Estabelecer uma configuração final do sistema, recorrendo ao modelo unificado de HW/SW desenvolvido, de maneira a cumprir o conjunto de restrições estabelecidas para o sistema embebido previamente planeado.