Microkernel architecture
Buzzwords often fall in and out of fashion. Vendors tend to enthusiastically apply the buzzwords of the day to their products, whether the terms actually fit or not.
The term microkernel
has become fashionable.
Although many new operating systems are said to be
microkernels
(or even
nanokernels
), the term may not mean very much
without a clear definition.
Let's try to define the term. A microkernel OS is structured as a tiny kernel that provides the minimal services used by a team of optional cooperating processes, which in turn provide the higher-level OS functionality. The microkernel itself lacks filesystems and many other services normally expected of an OS; those services are provided by optional processes.
The real goal in designing a microkernel OS is not simply to
make it small.
A microkernel OS embodies a
fundamental change in the approach to delivering OS
functionality. Modularity is the key, size is but a side
effect. To call any kernel a microkernel
simply because it happens to be small would miss the point
entirely.
Since the IPC services provided by the microkernel are used
to glue
the OS itself together, the
performance and flexibility of those services govern the
performance of the resulting OS. With the exception of those
IPC services, a microkernel is roughly comparable to a
realtime executive, both in terms of the services provided
and in their realtime performance.
The microkernel differs from an executive in how the IPC
services are used to extend the functionality of the kernel
with additional, service-providing processes. Since the OS
is implemented as a team of cooperating processes managed by
the microkernel, user-written processes can serve both as
applications and as processes that extend the underlying OS
functionality for industry-specific applications. The OS
itself becomes open
and easily extensible.
Moreover, user-written extensions to the OS won't affect the
fundamental reliability of the core OS.
A difficulty for many realtime executives implementing the POSIX 1003.1 standard is that their runtime environment is typically a single-process, multiple-threaded model, with unprotected memory between threads. Such an environment is only a subset of the multi-process model that POSIX assumes; it cannot support the fork() function. In contrast, QNX OS fully utilizes an MMU to deliver the complete POSIX process model in a protected environment.
The first version of the QNX OS was shipped in 1981. With each successive product revision, we have applied the experience from previous product generations to the latest incarnation, our most capable, scalable OS to date. We believe that this time-tested experience is what enables the QNX OS to deliver the functionality it does using the limited resources it consumes.