O documento descreve a história e as características do sistema operacional de tempo real QNX Neutrino. Desenvolvido inicialmente em 1980, o QNX foi reescrito várias vezes para maior compatibilidade com POSIX e suporte a multiprocessamento. Atualmente é usado extensivamente em automóveis e outros sistemas embarcados, tendo arquitetura de microkernel e suporte a tempo real, comunicação interprocessos, desenvolvimento POSIX e multiplataforma.
História e arquitetura do sistema operacional QNX Neutrino
1. QNX Neutrino
César Lincoln Cavalcante Mattos
Raphael Torres Santos Carvalho
Levi Lopes Soares e Silva
2. QNX Neutrino
História
Em 1980, Gordon Bell e Dan Dodge, estudantes da Universidade de WaterLoo fundam a
Quantum Software Systems. Em 1982, a primeira versão do QNX é lançada para Intel 8088.
Nos primeiros anos, o QNX ficou difundido somente no mundo não-embarcado, pois seu
kernel de 44k era muito grande para esse tipo de aplicação.
No fim dos anos 80, a Quantum percebeu que o mercado estava migrando rapidamente
para o modelo POSIX e decidiu reescrever o kernel para maior compatibilidade em baixo
nível. O resultado foi o QNX 4. Nesse mesmo tempo, foi desenvolvido um sistema de janelas,
nomeado de Photon microGUI.
3. QNX Neutrino
História
Em 2001, saiu o QNX Neutrino, nova versão do QNX, totalmente compatível com POSIX e
desenvolvida desde o início para ser compatível com SMP (Symmetric Multiprocessing),
mantendo a arquitetura de microkernel.
Em 2004 a companhia anunciou sua venda para Harman International Industries. Antes
dessa aquisição, o QNX já havia sido usado extensamente na indústria automotiva para
sistemas telemáticos. Desde sua compra pela Harman, o QNX têm sido projetado sobre 180
modelos diferentes de automóvel.
Em 12 de setembro de 2007, a QNX Software Systems abriu o código fonte do seu sistema
operacional de tempo real QNX Neutrino, para uso não-comercial.
4. QNX Neutrino
Arquitetura Geral
Microkernel
Modularizada - Qualquer componente pode ser interrompido, removido ou adicionado
dinamicamente.
Multi-target - ARM, MIPS, PowerPC, SH-4, StrongARM, XScale, x86.
Suporte a POSIX.
Suporte a J2ME.
Suporte a ambientes multi-core.
Sistema de arquivos em espaço de usuário com capacidade de compressão e acesso a
arquivos via rede.
QNX Photon microGUI - Sistema de interface.
6. QNX Neutrino
Características RT
O kernel QNX contém apenas escalonador de CPU, comunicação inter-processos,
redirecionamento de interrupção e temporizadores.
Todos os processos executam em espaço de usuário, incluindo um processo especial
conhecido como proc, que opera em conjunto com o microkernel na criação de outras tarefas
e no gerenciamento de memória.
Esta organização é possível devido a dois mecanismos chaves – um subroutine-call para
comunicação inter-processos, e um boot loader que pode carregar uma imagem contendo,
além do kernel, programas de usuário e bibliotecas compartilhadas.
Microkernel é inteiramente preemptivo com escalonador baseado em prioridades.
Suporte a clusters de tolerância a falhas.
Otimizado para sistemas distribuídos, inclusive com acesso a recursos externos
compartilhados.
CPM (Critical Process Monitor). - quot;Smart watchdogquot; que automaticamente reinicializa
processos críticos quando estes falharem, reduzindo o MTTR (Mean Time to Repair) do
sistema .
7. QNX Neutrino
Características RT
As requisições de I/O são executadas através de troca de mensagens. Threads de alta
prioridade recebem serviço de I/O antes das de baixa prioridade, uma característica essencial
em um sistema hard real-time.
O conjunto de device drivers e bibliotecas de suporte necessários para inicialização do
sistema não estão no kernel. É possível colocar uma imagem de boot contendo esse conjunto
de aplicações na ROM, o que pode ser útil em sistemas embarcados.
O QNX Neutrino suporta Symmetric Multiprocessing (SMP) e Bound Multiprocessing (BMP).
BMP é usado para facilitar a migração de aplicação non-SMP safe para computadores
multiprocessadores.
O QNX Neutrino permite que em um Pentium III um processamento de interrupção de 0,55µs
no qual os eventos podem ser registrados. Para efeito de comparação, sistemas operacionais
de tempo compartilhado reagem a eventos somente após aproximadamente 10 ms.
8. QNX Neutrino
Comunicação Inter-Processos (IPC)
Utiliza um pathname space que permite qualquer processo requisitar serviços de outros
processos através de chamadas POSIX, como open(), read(), write() e lseek(). Essas
chamadas são convertida de maneira transparente em trocas de mensagens feitas através
de um quot;barramento de softwarequot;.
Na operação da troca de mensagens, a mensagem é copiada, pelo kernel, do espaço de
endereço do processo emissor para aquele do processo receptor. Se o processo receptor
estiver esperando pela mensagem, o controle da CPU é transferido no mesmo instante, sem
passar através do escalonador. Portanto, enviar uma mensagem para outro processo e
esperar pela resposta não resultam em perda de um turno pela CPU. Esta integração entre
passagem de mensagem e escalonador é o principal motivo da grande utilização desse tipo
de IPC no QNX.
9. QNX Neutrino
Comunicação Inter-Processos (IPC)
As mensagens podem ser manipuladas diretamente através das funções MsgSend(),
MsgReceive() e MsgReply().
É possível utilizar mecanismos de IPC tradicionais, como pipes, FIFOs, memória
compartilhada, signals, etc.
O sistema de TDP (Transparent Distributed Processing), permite a comunicação entre
processos distribuídos.
12. QNX Neutrino
Instrumented Kernel
É possível substituir o kernel padrão do QNX Neutrino por um instrumented kernel, onde
podemos debugar todas as partes do sistema em busca de possíveis deadlocks, problemas
de temporização, falhas lógicas, etc.
Pode-se ainda selecionar as informações que serão buscadas através de filtros definidos
pelo usuário.
13. QNX Neutrino
QNX Photon microGUI
GUI modular para sistemas embedded.
Suporte a múltiplas janelas, múltiplas camadas.
Display de gráficos e animações 2D e 3D.
Framework multimídia com suporte aos formatos AAC, MP3, MPEG-1, WAV, AIFF, IFF, AU,
etc.
Possibilidade de alterar qualquer parte da interface sem a necessidade de reiniciar o
sistema, pois os serviços da GUI rodam como aplicações em áreas de memória reservada.
Capacidade de se integrar a aplicações Java.
Conexão com desktops Windows remotos através do Phindows.
QNX Voyager - Web Browser para sistemas embedded.
14. QNX Neutrino
QNX Momentics Development Suite
IDE de desenvolvimento multilinguagem (C, C++ e embedded C++) baseada no Eclipse que
pode ser utilizada no Windows, Linux, Solaris ou no próprio QNX neutrino.
Ambiente de debug integrado com suporte a aplicações multi-thread multi-processadas
(mais de uma CPU).
Sytem Profiler e Application Profiler - Permitem monitorar a performace da aplicação,
verificar conflitos de temporização, estado das threads, traces e interações com o
instrumented kernel.
Ferramenta de análise de memória - Traça um mapa de utilização da memória.
Target System Tools - Monitora todas as caracterísitcas de execução da aplicação
diretamente no hardware alvo.
Application Builder - Ferramenta para construção de interfaces Photon.
20. QNX Neutrino
Outros TDKs (Technology Development Kits)
Adaptative Partitioning - Realoca tempo de processamento entre processos de forma
dinâmica, maximizando o uso da CPU e evitando inanição.
Resource Manager Framework - Framework para desenvolvimento de drivers em espaço de
usuário.
21. QNX Neutrino
Principais Clientes
Boeing
BTI Photonics
Chrysler
Cisco
Deltex Medical
Grayson Wireless (Allen Telecom)
Hyundai
NASA
Naval Undersea Warfare Center
Physiometrix PSA 4000
U.S. Army (Exército dos E.U.A)
Siemens AXIOM Arti