# QNX

QNX (pronunciat Q.N.X. o Q-nic) és un sistema operatiu de temps real basat en Unix que compleix la norma POSIX. És desenvolupat principalment per a ús en sistemes incrustats per QNX Software Systems, una empresa canadenca. Està orientat a l'ús en microcontroladors i sistemes crítics.
QNX està basat en una estructura de microkernel, que proporciona característiques d'estabilitat avançades davant d'errades de dispositius, aplicacions, etc. Està disponible per les següents arquitectures: x86, MIPS, PowerPC, SH4 (fins i tot a la Dreamcast en una versió molt limitada d'aquest), ARM, StrongARM i xScale. Photon o Photon microGUI és el sistema de finestres (servidor i client) de QNX, tot i que també funciona una versió de XWindows.
Els sistemes operatius de temps reals són interessant per les situacions on és absolutament necessari una presa continua de, per exemple, mostres de dades. Per aquest interès hi ha diversos projectes per crear versions en temps real d'altres sistemes.

## Història
### Primers passos de la companyia

Gordon Bell i Dan Dodge, estudiants de la Universitat de Waterloo l'any 1980, s'apuntaren a un curs de computació en disseny de sistemes operatius, en el qual els estudiants van construir un nucli de sistema operatiu bàsic en temps real. Tots dos estaven convençuts que hi havia una necessitat comercial d'aquest sistema i es traslladaren a la ciutat canadenca Kanata, Ontario, aquell mateix any, van crear l'empresa Quantum Software Systems. El 1982 es va llançar la primera versió de QUNIX per a la CPU Intel 8088.
El 1984, en un intent d'evitar-se problemes amb les lleis de marques registrades, es va canviar el nom pel de QNX. Un dels primers usos que es va donar al Sistema operatiu de temps real, el (RTOS) de QNX va ser destinat al món dels sistemes no-encastats, quan va ser seleccionat pel disseny d'ordinadors del sistema educatiu d'Ontario, el Unisys ICON. Durant la resta d'anys, QNX va ser destinat per aplicacions amb més abast, donat que el seu nucli de 44k era massa gran per adaptar-se a les computadores d'un sol xip de l'època. El sistema va obtenir una gran reputació degut a la seva fiabilitat, i se'n va donar ús del mateix a aplicacions industrials.
A final dels anys 1980, Quantum es va adonar que el mercat es movia ràpidament cap al model POSIX i van decidir reescriure el nucli per poder tenir més comptabilitat a baix nivell. El resultat d'aquesta decisió va ser el QNX 4. Durant aquest temps, Patrick Hayden amb l'ajut de Robin Burgener, va desenvolupar un nou sistema d'enfinestrament. Aquest concepte patentat va ser desenvolupat al la GUI anomenada QNX Photon microGUI. QNX també va proporcionar una versió del sistema X Window System.
Cap a la fi del segle xx, la companyia (ara anomenada QNX Software Systems) començà a treballar en una nova versió de QNX, dissenyada des de zero per poder integrar SMP, per donar suport a les actuals qualse properes APIs POSIX mentre seguia conservant l'arquitectura mirokernel.

### Entrada als anys 2000

Junt amb el nucli Neutrio, QNX Software Systems va ser un membre fundador del consorci Eclipse. La companyia va llançar una suite de plug-ins empaquetats amb el workbench d'Eclipse el 2002 sota el nom de QNX Momentics Tool Suite.
El 2004, la companya va anunciar que havia estat venuda a la companyia Nord Americana Harman International Industries. Abans d'aquesta adquisició, QNX software va ser utilitzat àmpliament en la indústria de la automoció per a sistemes telemàtics. Des de la compra de Harman, QNX ha dissenyat software per a més de dos cents marques diferents de automoció. A meitat del 2011, més de 20 milions de vehicles utilitzaven la plataforma QNX CAR Aplication Platform. Des d'aleshores, la companyia ha llançat diferents programaris intermediaris incloent-hi la QNX Aviage Multimedia Suite la QNX Aviage Acoustic Proccessing Suite i la QNX HMI Suite.
El setembre de 2007, QNX Software Sistems va anunciar la disponibilitat de parts del seu codi font, però uns anys més tard, el 9 d'abril de 2010, el mateix día que la companyia canadenca Research in Motion (actualment BlackBerry) va anunciar l'adquisició de QNX Software Systems es va restringir l'accés al codi font de QNX del públic en general.
El setembre del mateix any, BlackBerry treia al mercat la tablet BlackBerry PlayBook que va utilitzar un nou sistema operatiu BlackBerry Tablet OS basat en QNX.

### QNX en el sector dels telèfons intel·ligents

El 18 d'octubre de 2011, Research In Motion va anunciar BBX la qual va ser posteriorment anomenada BlackBerry 10 el desembre del mateix any. Els dispositius Blackberry 10 van ser basats en el sistema operatiu BlackBerry PlayBook QNX per a dispositius tàctils, però adaptaren la interfície d'usuari per a smartphones.

### QNX en el sector de l'automoció

Al març del 2014, al Saló de l'Automòbil de Ginebra, Apple va fer una demostració del sistema CarPlay, el qual donava una interfície molt semblant a la de iOS però en les consoles dels vehicles. Un cop configurat per la marca, QNX podia ser programat per transferir la seva pantalla i certes funcionalitats al dispositiu Apple CarPlay.
El desembre del mateix any, la marca automobilística Ford, va anunciar que reemplaçaria el sistema operatiu que muntaven (Microsoft Auto) per QNX.

### QNX en l'actualitat

El gener de 2017, QNX va anunciar el seu pròxim llançament de la seva plataforma de desenvolupament SDP 7.0, amb suport per a per a les plataformes de 32 i 64 bits d'ARM i Intel. Finalment aquesta va ser llançada el març d'aquest mateix any.

## Arquitectura

El nucli QNX conté el planificador de la CPU, la comunicació entre processos, la redirecció de les interrupcions i els temporitzadors. La resta corre com a procés d'usuari, això és possible mitjançant dos mecanismes; comunicació entre processos del tipus de crides a subrutines i un bootloader el qual pot carregar una Imatge ISO tant del sistema operatiu com de qualsevol col·lecció desitjada de programes escollits per l'usuari i llibreries compartides, eliminant així la necessitat de que el nucli contingui el conjunt de drivers del dispositiu i les llibreries de suport necessàries.
La pila de xarxa está basada en codi NetBSD. El Boot Loader és un altre component clau en el sistema de microkernel.

### Comunicació entre processos

La comunicació entre processos de QNX consisteix en l'enviament de missatges d'un procés a un altre i esperar la resposta. Toto això es fa amb una sola operació (MsgSend). El Missatge es copiat pel nucli des de l'espai d'adreces del procés que l'envia al procés que el reb. Si el procés que ha de rebre el missatge està esperant al missatge, el control de la CPU se cedit a l'hora sense necessitat d'utilitzar el planificador de la CPU; d'aquesta forma s'evita que aquest procés perdi la preferència del planificador. Aquesta integració entre el pas de missatges i el planificador de la CPU és un dels mecanismes clau que fa el sistema de QNX àmpliament utilitzable.

### Entrada/Sortida

Totes les operacions d'Entrada/sortida, arxius d'operacions del sistema i operacions de xarxa estan dissenyades per funcionar amb el mecanisme prèviament explicat, les dades transferides son copiades durant el pas de missatges. Les últimes versions de QNX, a més, redueixen el nombre de processos separats, integren la pila de xarxa i altres blocs de funcions a aplicacions individuals per motius de rendiment.
Com que les peticions d'entrada/sortida son realitzades mitjançant el pas de missatges i el maneig d'aquests es prioritzat segons la prioritat del thread. Els threads amb més prioritat rebran abans una operació del tipus entrada/sortida que un de menys prioritat, una característica essencial en els sistemes hard real-time.

### Boot loader

El Boot loader és un altre component clau en el sistema del microkernel. Com que els programes d'usuari poden ser creats en una imatge d'arrancada, no hi ha la necessitat de que el nucli contingui el conjunt de drivers del dispositiu i les llibreries de suport necessàries. També és possible inserir una imatge d'arranc dins una ROM, això és utilitzat en els sistemes encastats sense disc.

### Processament transparent distribuït

Degut a l'arquitectura distribuïda, és considerat també un sistema operatiu distribuït. Aquest, permet separar els nuclis QNX en diferents dispositius i accedir entre ells als sistemes de serveis, utilitzant el mateix mecanisme de comunicació que en l'accés als serveis propis del nucli.

## Variants QNX

El Sistema Operatiu de QNX està dissenyat per a poder ser utilitzat en diferents plataformes i per a ser implementat en una gran varietat d'entorns, per això disposa de 3 variants: QNX Neutrino RTOS, QNX OS for Safety i QNX OS for Medical.
QNX Neutrino RTOS
Aquest sistema operatiu a temps real està destinat per sistemes encastats relacionats amb el sector de l'automoció, mèdic, de transport, militar i industrial. Ofereix un microkernerel amb una arquitectura modular per poder optimitzar el sistema a l'ús de l'usuari.
Neutrino, a més, suporta l'ús de diferents infraestructures com ARMv7, ARMv8 i x86 i suport per a gràfics accelerats per CPU, també suporta el processament multisimètric i CPU pinning, anomenat Bound Multiprocessing (BMP) en la terminologia de QNX. Aquesta tecnologia és utilitzada per millorar els accesos a la caché i facilitar la migració segura d'aplicacions que no disposen de SMP a processadors multi-core.
QNX OS for Safety
Disposa de dos estàndards de seguretat: ISO 26262 en ASIL D i IEC 61508 en SIL 3. Aquest Sistema Operatiu ofereix una plataforma destinada a la creació de sistemes de seguretat crítics destinats al mercat de l'automatització industrial, mèdic, generació d'energies i transport ferroviari. El Sistema suporta l'ús de diverses plataformes com x86 i dispositius ARM multi-core via SMP.

### QNX OS for Medical

Es tracta d'una plataforma software modular destinada per a sistemes mèdics encastats la qual compleix amb la norma IEC 62304. Aquesta plataforma es 100% compatible amb el sistema operatiu QNX estàndard.

## Referències

* ↑ «SDP 7.0» (en anglès). QNX. [Consulta: 30 juny 2016].
* ↑ «Process Architecture» (en anglès). Oracle. [Consulta: 30 juny 2017].
* ↑ «QNX Neutrino RTOS» (en anglès). QNX. [Consulta: 30 juny 2017].
* ↑ «Multicore Processing» (en anglès). QNX. [Consulta: 30 juny 2017].
* ↑ «QNX OS for Safety» (en anglès). QNX. [Consulta: 30 juny 2017].
* ↑ «QNX OS for Medical» (en anglès). QNX. Arxivat de l'original el 2017-07-03. [Consulta: 30 juny 2017].

## Enllaços externs

* QNX - Lloc web oficial
* OpenQNX - Lloc web de fans de QNX