Linux em Tempo Real (2)
Há poucas semanas levantei um post abordando Linux embarcado. Interessante que foram colocados muitos comentários e recebi diversos emails sobre o assunto. O tema está realmente despertando interesse. Assim, acho que vale a pena extrair alguns paragráfos do meu livro “Software Embarcado: a Nova Onda da Informática”, editado pela Brasport e compartilhá-los com vocês.
O mercado de software embarcado tem peculiaridades específicas.
Apresenta uma ampla diversidade de funcionalidades e utilizam uma gama
muito grande de processadores. Os softwares embarcados apresentam uma
variedade imensa de arquiteturas. É uma diversidade diferente do
ambiente de computação tradicional, como desktops, onde existe uma
concentração em poucos processadores, como Intel e AMD.
Uma característica do software embarcado é que deve apresentar alta
estabilidade. Uma aeronave ou uma usina nuclear não pode apresentar
falhas no software. Claro que existem dispositivos menos exigentes
quanto à falhas, como por exemplo, uma máquina de venda de
refrigerantes (vending machine), onde uma eventual falha não causa
maiores danos ou riscos de vida. Outra característica de muitos
dispositivos é a necessidade de operação em tempo real, principalmente
nos equipamentos de controle de processo.
Algumas falhas de software embarcado podem ser catastróficas. Por
exemplo, na guerra das Malvinas, a fragata inglesa Sheffield foi
afundada porque o software de seu radar identificou um míssil argentino
como “amigo” e não acionou as defesas antimísseis. Na primeira Guerra
do Golfo, em 1991, um pequena falha de software, com erros de precisão
de 0,000000095 segundos em cada décimo de segundo, gerou uma imprecisão
acumulada em 100 horas que fez com um míssil Patriot não conseguisse
interceptar um míssil iraquiano Scud, que explodiu no alvo, matando 28
pessoas.
As interfaces de acesso também são variadas, indo de simples teclados e
mouses, a sensores e atuadores especializados.
A maioria dos dispositivos dispõe de pouco espaço, e, portanto o
software deve operar em ambientes de recursos computacionais limitados,
como memória ou discos magnéticos. Assim, recursos como gerenciamento
de discos, rotinas de grande impacto no desempenho de sistemas
comerciais, torna-se pouca importância no contexto da computação
embarcada.
Esta heterogeneidade aparece também no volume de vendas do software.
Dispositivos embarcados podem ser vendidos aos milhões, como telefones
celulares ou em poucas unidades, como um sistema de automação de planta
industrial. Os preços dos equipamentos também variam de poucos reais
até milhões de reais.
Esta diversidade de hardware e funcionalidade leva a uma indústria
altamente fragmentada. Este cenário, tradicionalmente ocupado por
sistemas operacionais proprietários, começa a ser ocupado pelo
Linux.
Esta tendência pode ser explicada em parte pela crescente sofisticação
dos equipamentos e dos sistemas embarcados. Quando as funções eram
relativamente simples e por serem únicas, a solução mais adotada era a
construção de um sistema proprietário e especifico. À medida que os
equipamentos se sofisticam, aumenta a complexidade do sistema
operacional embarcado, e a manutenção de equipes para desenvolvimento e
manutenção de sistemas proprietários de uso especifico começa a ficar
caro demais. Os sistemas operacionais começam a ter interfaces mais
sofisticados como Ethernet, USB, Bluetooth e outros.
O Linux torna-se atrativo, pois com ele se pode partir de um sistema
operacional escalável e modular, com uma base sólida e estável, que já
suporta os principais interfaces e protocolos abertos. Não se precisa
reinventar a roda, mas parte-se de uma porção significativa de código
fonte já pronto e testado, para concentrar-se apenas na construção das
especificidades necessárias a função de um determinado equipamento. A
redução de tempo (time-to-market) e custos é bastante positiva. Outro
impulsionador para o uso do Linux em sistemas embarcados é o próprio
modelo de software livre, que não exige pagamento por licenças. Como
muitos dispositivos são contados aos milhões, um pagamento de royalties
tornaria o negócio inviável.
As empresas que atuam no setor de computação embarcada usam o código
base do Linux, fazem modificações e criam aditivos, com funcionalidades
específicas, direcionadas às suas necessidades. Além disso, como o
código Linux é abrangente, faz-se também uma verdadeira lipoaspiração,
cortando código desnecessário às funções embarcadas. O Linux não foi
inicialmente projetado para o mercado de software embarcado e precisa,
portanto, passar por estas cirurgias.
Entre as funções e modificações destacam-se as que permitem o Linux
operar em tempo real; que permitem um start-up imediato (o tempo de
boot de um equipamento embarcado não pode ser tão lento quanto o de um
desktop); e que fazem o sistema ser extremamente eficiente, operando em
um ambiente com um mínimo de recursos computacionais.
Como o kernel padrão do Linux não é um sistema em tempo real, seu tempo
de resposta não é determinístico. Para operar em tempo real, existem
duas alternativas, ou colocar o Linux operando em baixo de um sistema
tempo real (na verdade um mini sistema operacional, apenas focado em
tratar interrupções em tempo real) ou tornar o próprio kernel do Linux
preemptível, ou seja, permitir que tarefas de alta prioridade obtenham
controle do processador com a máxima presteza. O patch que permite o
Linux ser preemptível foi adotado por Linus Torvalds no código base a
partir da versão 2.5.
Adicionar um segundo kernel, de alta prioridade, significa que o kernel
normal vai operar como uma tarefa de menor prioridade. Alguns puristas
lembram que esta opção injeta um componente não Linux (e eventualmente
proprietário) no cenário.
Embora as alternativas embarcadas não sejam compatíveis entre si, não
chegam a criar variantes (forkings) do kernel do Linux. As empresas de
sistemas embarcados criam suas novas versões de tempo real a partir da
última versão do kernel, não fazendo atualizações em cima das versões
anteriores já adaptadas, o que o distanciaria mais e mais do Linux
standard. Em cima desta última versão é que atualizam e inserem as
funcionalidades de tempo real. Com isso se mantém a compatibilidade com
o código base do Linux, e concentram-se em apenas uma pequena parte do
kernel, exatamente a que precisa de modificações para se comportar na
modalidade de tempo real.
Com esta estratégia, as empresas de sistemas embarcados conseguem
usufruir do apoio e suporte da própria comunidade, no que se refere a
bugs do código base, sem necessidade de retrabalhos.
Todos estes impulsionadores têm levado a uma crescente importância do
Linux como sistema operacional para computação embarcada. O mercado de
eletrônica de consumo é um dos segmentos mais atuantes na adoção do
Linux. Uma pesquisa no site LinuxDevices (www.linuxdevices.com) retorna centenas de produtos,
que variam de celulares, smartphones, telefones para VoIP, PDAs,
set-top-boxes da televisão digital e diversos equipamentos baseados em
versões embarcadas do Linux.
*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.
