Implementando Linux e Java em tempo real
Cezar Taurion, gerente de novas tecnologias da IBM Brasil, fala um pouco sobre a experiência da empresa com a dupla Linux e Java operando em ambientes que exigem requerimentos críticos de tempo.
Sistemas embarcados são o coração da maioria das máquinas e equipamentos que estão no nosso dia a dia. Entretanto, muitas vezes não reconhecemos estes equipamentos como computadores. Os chips e os sistemas que operam dentro deles estão, na maioria das vezes, escondidos dentro das funções básicas dos equipamentos. Operam de forma invisível para nós e seus contatos com o mundo exterior acontecem através de sensores e atuadores.
Muitos destes sistemas trabalham em tempo real, onde não pode haver demoras ou imprevisibilidades do tempo de resposta. E o que isto significa? Um sistema de tempo real opera sob requerimentos críticos de resposta, ou seja, se uma tarefa não for completada em um período determinado de tempo ela simplesmente terá falhado. Um exemplo simples pode ser um robô em uma linha de montagem. Se o seu sistema de controle não reconhecer determinado objeto em um instante preciso, quando ele estiver passando exatamente pelo ponto da solda, o objeto seguirá sem ter sido soldado e a operação terá falhado. Não existe possibilidade de recomeçar, recuando a esteira para reposicionar o objeto na posição correta e tentar uma segunda vez.
Para garantir esta resposta imediata, em um sistema operacional de tempo-real, um processo de alta prioridade assume o controle do processador de imediato, sem espera. Processos de alta prioridade não esperam por processos de prioridade inferior. Este escalonamento é chamado de escalonamento determinístico (deterministic scheduling). É um mecanismo diferente dos sistemas de uso geral.
Neste contexto temos o Linux crescendo em popularidade. Claro, que
para operar em tempo real são necessárias algumas modificações no
kernel, para torná-lo determinístico.
Bem, e além do sistema operacional? Não podemos esquecer a própria
aplicação. O desenvolvimento de sistemas embarcados em tempo real
apresenta desafios que não são encontrados nos sistemas tradicionais.
Um fator essencial é desempenho. Uma aplicação em tempo real deve
operar sob rígidas limitações de desempenho. Como estes sistemas estão
cada vez mais complexos, o fator produtividade torna-se também
essencial. Devido a estas características, aliadas à maior capacidade
dos processadores, começamos a deixar de lado Assembly, Ada e C,
adotando C++ e Java. Java, por exemplo, como podemos ver em http://www.tiobe.com/ é
uma linguagem cada vez mais disseminada. Ah, e falando em Java,
recomendo a revista Mundo Java (www.mundojava.com.br), onde mantenho a coluna
“Tendências em foco”. A publicação é realmente de altíssimo nível.
Mas, como esta dupla Linux e Java opera em tempo real? É realmente possível? Bem, temos um caso concreto para mostrar que funcionam bem, que é a implementação pela IBM e Raytheon dos sistemas de controle (incluem-se command-and-control, navegação, deteção de alvos, controle de armas e sistema de radar) da nova geração de destroyers da US Navy, a série DDG 1000. Este sistema é baseado em servidores blade, operando WebSphere e Java, em cima de Linux, em tempo real!
Uma novidade muito interessante é a adaptação de Java e do WebSphere para operar em tempo real. Com uso de Java aumenta-se em muito a produtividade e amplia-se a base de desenvolvedores aptos a desenvolver novas e mais complexas aplicações em tempo real. Não é mais necessário contratar-se experts em Ada, C ou Assembly... Uma descrição da aplicação desenvolvida para o DDG 1000 pode ser vista em http://www-03.ibm.com/press/us/en/pressrelease/21033.wss.
Também sugiro a leitura de alguns papers interessantes que descrevem como o WebSphere e Java foram adaptados para operar em tempo real. Acessem http://www-306.ibm.com/software/webservers/realtime/ para obterem estes papers. Um destes papers é “IBM WebSphere Real Time: Providing Predictable Performance”, que pode ser obtido em ftp://ftp.software.ibm.com/software/webservers/realtime/pdfs/WebSphere_Real_Time_Overview.pdf. Este paper descreve os componentes do ambiente Java em tempo real da IBM (IBM WebSphere Real Time).
Outro paper que recomendo ler é “Creating Predictable-performance Java Applications in Real Time”, obtido em ftp://ftp.software.ibm.com/software/webservers/realtime/pdfs/WebSphere_Real_Time_Technical_Overview.pdf . Neste paper vocês podem ver em detalhes como a J9 (Java Virtual Machine) da IBM funciona e o que foi necessário para adaptar uma JVM para operar em tempo real.
Bem, e não é só: acessem http://www.alphaworks.ibm.com/topics/realtimejava para mais informações sobre Java em tempo real, inclusive uma descrição técnica do Metronome, componente de Garbage Collection do Java em tempo real da IBM.
E, para finalizar, vocês conhecem a WebSphere Global Community? Se não, recomendo enfáticamente acessar www.websphere.org. Lá vocês encontrarão muitas informações e grupos de usuários, inclusive no Brasil (RJ, SP, RS, SC, DF, CE e GO).
*Cezar Taurion é gerente de novas tecnologias aplicadas da IBM Brasil. Seu blog pode ser acessado em www-03.ibm.com/developerworks/blogs/page/ctaurion.
Este artigo foi publicado com a devida autorização. Todos os direitos reservados ao autor.
