(pronounced either Q-N-X or Q-nix) is a commercial
POSIX -compliant
Unix-like Real-time Operating System , aimed primarily at the
Embedded System s market. It is probably the most successful
Microkernel Operating System .
As a microkernel-based OS, QNX is based on the idea of running most of the OS in the form of a number of small tasks, known as ''servers''. This differs from more traditional monolithic
Kernels , in which the operating system is a single very large program comprised of a huge number of "parts" with special abilities. In the case of QNX, the use of a microkernel allows users (developers) to turn off any functionality they do not require without having to change the OS itself; instead, those servers are simply not run.
The system is quite small, fitting in a minimal fashion on a single floppy, and is considered to be both very fast and fairly "complete."
QNX Neutrino (2001) has been ported to a number of platforms and now runs on practically any modern CPU that is used in the embedded market. This includes the
X86 family,
MIPS ,
PowerPC ,
SH-4 and the closely related family of
ARM ,
StrongARM and
XScale CPUs.
The non-commercial version (QNX NC) was discontinued in 2003. The current "evaluation" version is available at no charge, but after 30 days, some key features become disabled.
Gordon Bell and
Dan Dodge , students at the
University Of Waterloo in 1980, both took a standard
Computer Science course in operating system design, in which the students constructed a basic real-time kernel. Both were convinced there was a commercial need for such a system, and moved to
Kanata, Ontario , (a high-tech area outside
Ottawa ) to start that year. In 1982 the first version, '''QNX''', was released for the
Intel 8088 CPU .
One of QNX's first widespread uses was in the non-embedded world, when it was selected as the operating system for the
Ontario education system's own computer design, the
Unisys ICON . Over the years QNX was used mostly for "larger" projects, as its 44k kernel was too large to fit inside the single-chip computers of the era. The system garnered an enviable reputation for reliability and found itself in use running machinery in a number of industrial applications.
In the late- named . QNX also provided a version of the
X Window System . Due to the
Posix interface, porting
Unix ,
BSD and
Linux packages to QNX became much easier.
Toward the end of the 1990s QNX began work on a completely new version of QNX, designed from the ground up to be
SMP capable, as well as support all current
Posix API s, and any new
Posix API s that could be anticipated; but still retaining the microkernel architecture. This resulted in , which was released in 2001. Along with the Neutrino kernel, QNX made a serious commitment to tooling, and became a founding member of the
Eclipse consortium. QNX soon released a suite of Eclipse plug-ins packaged with the Eclipse workbench under the name Momentics.
In
2004 the company announced it had been sold to
Harman International Industries . Prior to the acquisition by Harman International, QNX was already widely used in the Automotive industry for
Telematics systems. Since the purchase by Harman QNX has been designed into over 100 different
Automobile models.
Cisco 's
IOS-XR (ultra high availability IOS), is based on QNX, as is
IOS Software Modularity .
The QNX kernel contains only
CPU Scheduling ,
Interprocess Communication ,
Interrupt redirection and timers. Everything else runs as a user process, including a special process known as which performs process creation, and
Memory Management by operating in conjunction with the
Microkernel . This is made possible by two key mechanisms - subroutine-call type interprocess communication, and a
Boot Loader which can load an image containing not only the kernel but any desired collection of user programs and shared libraries.
QNX interprocess communication consists of sending a message from one process to another and waiting for a reply. This is a single operation, called . The message is copied, by the kernel, from the address space of the sending process to that of the receiving process. If the receiving process is waiting for the message, control of the CPU is transferred at the same time, without a pass through the CPU scheduler. Thus, sending a message to another process and waiting for a reply does not result in "losing one's turn" for the CPU. This tight integration between message passing and CPU scheduling is one of the key mechanisms that makes QNX message passing broadly usable. Most
UNIX and
Linux interprocess communication mechanisms lack this tight integration, although an implementation of QNX-type messaging for Linux does exist. Mishandling of this subtle issue is a primary reason for the disappointing performance of some other microkernel systems.
Due to the ).
All I/O operations, file system operations, and network operations work through this mechanism, and the data transferred is copied during message passing. There are no device drivers in the kernel. There is some performance penalty for the extra copying operations required, but in practice this does not seem to be a significant source of overhead.
Message handling is prioritized by
Thread priority. Since I/O requests are performed using message passing, high priority threads receive I/O service before low priority threads, an essential feature in a
Hard Real-time system.
The boot loader, although seldom discussed, is the other key component of the minimal microkernel system. Because user programs can be built into the boot image, the set of device drivers and support libraries needed for startup need not be, and are not, in the kernel. Even such functions as program loading are not in the kernel, but instead are in shared user-space libraries loaded as part of the boot image. It is possible to put an entire boot image into
ROM , which is used for diskless embedded systems.
QNX has recently announced that they will soon be shipping
Adaptive Partitioning which is an
Adaptive Partition Scheduler .
Some important competitors in the embedded market are
LynxOS ,
VxWorks ,
Linux ,
THEOS ,
Windows CE ,
RTEMS , and
OS-9 .