| Nome: | Descrição: | Tamanho: | Formato: | |
|---|---|---|---|---|
| 883.8 KB | Adobe PDF |
Autores
Orientador(es)
Resumo(s)
É com pouca surpresa que verificamos que o nível de complexidade dos sistemas
tem vindo a aumentar expressivamente. Actualmente faz parte do quotidiano utilizar
serviços, online ou não, que atingem nível de complexidades muito superiores quando
comparados aos sistemas de à 20, 30 anos atrás. Sistemas/Aplicações de tempo real são
quase como uma subgrupo dentro dos sistemas actuais. Sistemas de tempo real podem ser
encontrados nos mais diversos locais, actualmente quase todos os sistemas embebidos
conteem componentes de tempo real. Alguns exemplos de sistemas que podem utilizar
tempo real são, carros, radares, braços robóticos, linhas de montagem, satélites,
UAV(Unmanned Aerial Vehicle) e até aviões.
Geralmente para implementar sistemas de tempo real eram utilizadas linguagens
consideradas mais tradicionais, tais como C ou ADA. No entanto o nível de
complexidade tem aumentado tanto que os programadores têm procurado alternativas a
essas linguagens. Uma das alternativas encontradas veio de uma linguagem já existente e
extremamente popular, Java. Java é uma linguagem de programação desenvolvida pela
Sun Microsystems. Conta actualmente com cerca de 6,5 milhões de programadores e
pode ser encontrada em virtualmente todos os segmentos de indústria. Tudo isto faz do
Java uma linguagem extremamente atractiva.
Devido ao seu propósito e desenho quando Java foi introduzido em 1995 parecia
irrelevante no campo da computação de tempo real. Apesar de boas características
introduzidas pelo Java no desenvolvimento de software simplesmente não era compatível
com sistemas de tempo real. No entanto devido a popularidade que o Java ganhou ao
longo dos anos, em 1998 um grupo de programados juntou-se para criar o Real-Time
Specification for Java (RTSJ).
O Real-Time Specification for Java é uma série de interfaces e especificações que
permite que se desenvolva sistemas de tempo real na linguagem de programação Java. O
objectivo é fornecer informações complementares que permitam, entre outras coisas,
estender o modelo de memória Java e melhorar a semântica do escalonador de threads. O
RTSJ pretende criar uma extensão da especificação da linguagem Java e da sua máquina
virtual.
xi
As arquitecturas multi-core são uma das possíveis soluções para o processamento
paralelo. Multi-core tem sido a tecnologia de ponta há já alguns anos. A grande
motivação por detrás do multi-core tem sido as limitações que os processadores de um
único core apresentam. Um processador multi-core é um processador que combina mais
que um core independente. Cada core pode implementar optimizações tais como multithreading.
Um sistema que apresente n cores vê a sua performance optimizada quando se
vê perante n threads a funcionar concorrentemente. Em termos gerais cada core num
processador multi-core assemelha-se a uma implementação de um processador em singlecore.
A ideia de ter paralelismo a um nível físico é uma ideia extremamente atractiva. Se
conseguirmos dividir uma tarefa grande em várias pequenas e executar essas pequenas
tarefas em simultâneo conseguimos obter resultados extremamente satisfatórios. No
entanto por muito vantajoso que seja a utilização de modelos que utilizem paralelismo, a
migração dos modelos sequenciais para modelos paralelos não é de todo trivial. Nem
todas as tarefas são facilmente divididas em várias pequenas tarefas, e nas tarefas
paralelas existem por vezes problemas com execuções concorrentes.
Para obter com sucesso uma aplicação de tempo real é necessário suporte para o
sistema, para isto é necessário um RTOS (Real-Time Operating System). Um RTOS é
um sistema operativo que se destina a sistemas/aplicações de tempo-real. Tal como todos
os sistemas de tempo-real, um RTOS oferece uma camada entre o software e os recursos
de hardware.
Espera-se que uma aplicação de tempo-real a correr num RTOS tenha um
comportamento que encaixe em padrões temporal pré definido. Isto significa que a
quantidade de tempo que cada serviço do sistema é conhecido e restrito.
Apenas o RTOS não garante que um sistema seja capaz de cumprir os prazos que a
aplicação requer. É da responsabilidade de quem está a desenvolver o sistema/aplicação
fazer com que esse sistema/aplicação seja capaz de cumprir os prazos pretendidos.
Neste sentido o objectivo principal de um RTOS é de fornecer um ambiente de
execução que consiga suportar serviços para sistemas/aplicações de tempo real.
O ARINC 653 (Avionics Application Standard Software Interface) é uma
especificação para o espaço e partição temporal. Define uma API de aviação que segue a
xii
arquitectura IMA (Integrated Modular Avionics). O sistema IMA suporta uma ou mais
aplicações de aviação em apenas um módulo, um módulo é uma máquina que contem
aplicações ARINC 653, e permite a execução independente dessas aplicações. Isto pode
ser atingido caso o sistema forneça separação funcional, normalmente chamada de
partição robusta, de aplicações de aviação. A especificação faz parte da serie ARINC
600-Series Standards for Digital Aircraft & Flight Simulator.
Este documento apresenta uma visão de como é possível fazer a transição de
aplicações de tempo real sequenciais que utilizem linguagens mais tradicionais para
aplicações de tempo real em arquitecturas multi-core utilizando Java. Para este efeito
uma aplicação já existente vai ser utilizada. A aplicação é denominada como “Airline
Operational Centre” ou AOC. O “Airline Operational Centre” foi desenvolvido pela
Skysoft e é utilizado como uma solução de comunicação para aviões. O seu principal
objectivo passa pela distribuição de relatórios entre as estações em terra (AGP - AOC
Ground Platform) e o sistema no avião. O sistema dentro do avião é constituído por dois
intervenientes, o próprio avião que vai fornecendo informação relevante como
temperaturas, consumo de combustível etc., e o piloto. A aplicação AOC é uma aplicação
ARINC653 e como tal segue a filosofia por detrás do conceito IMA. A aplicação AOC
foi totalmente implementada utilizando a linguagem de programação C, e segue modelos
de processamento sequenciais. A ideia por detrás da validação da aplicação passa por
fazer não só uma versão mais simplificada do AOC original, mas também uma versão em
Java e outra versão que utilize processamento paralelo. Com estes novos modelos
esperamos provar que é possível implementar um AOC em Java que utilize
processamento paralelo e que isso trás vários benefícios.
O objectivo estratégico do projecto JEOPARD é fornecer ferramentas para o
desenvolvimento de sistemas previsíveis que façam uso de arquitecturas multi-core. Estas
ferramentas vão melhorar a produtividade do software e a sua reciclagem através da
extensão da tecnologia de processador já estabelecida em sistemas desktop para as
necessidades específicas de sistemas embebidos em arquitecturas multi-core.
O projecto vai activamente contribuir com as normas requeridas para o
desenvolvimento de software portável neste domínio, tal como o Real-Time Specification
for Java.
xiii
Também, o projecto JEOPARD vai desenvolver uma plataforma de
desenvolvimento para aplicações de tempo real em ambientes multi-core. A interface vai
ser baseada em tecnológias existentes, que incluem o the Real-Time Specification for
Java (JSR 1 and JSR 282) e o Safety-Critical Java (JSR 302). Estas tecnologias
actualmente fornecem uma forte base para o desenvolvimento de sistemas de tempo real
que sejam complexos e altamente fiáveis, mas ainda não fornecem suporte para sistemas
multi-core. Ainda mais desafiante, é o facto de que algumas destas tecnologias não
referem o facto de se poder utilizar mais que um core de cada vez, o que torna impossível
desenvolver aplicações à escala com o número de processadores disponíveis em sistemas
multi-core actuais e futuros.
Como suporte a este documento vai ser utilizada a pesquisa que o projecto
JEOPARD está a fazer como também as ferramentas que o projecto está a desenvolver.
Descrição
Palavras-chave
Multi-Core Tempo real Processamento paralelo Plataforma de desenvolvimento ARINC 653 Java
