Solution, Consequences and Liabilities
The most important core services of the system should be encapsulated in a microkernel
component. The microkernel maintains the system resources and allows other
components to interact with each other as well as to access the functionality of the
microkernel. It encapsulates a significant part of system-specific dependencies, such as
hardware-dependent aspects. The size of the microkernel should be kept to a minimum,
therefore, only part of the core functionality can be included in it; the rest of the core
functionality is deferred to separate internal servers.
Internal servers extend the functionalities of the microkernel. Internal servers can for
example handle graphics and storage media. Internal servers can have their own
processes or they can be shared Dynamic Link Libraries (DLL) loaded inside the kernel. The
external server provides a more complex functionality; they are built on top of the core
services provided by the microkernel.
Different external servers may be needed in the system in order to provide the functionality
for specific application domains. These servers run in separate processes and employ the
communication facilities provided by microkernel to receive requests
from their clients
and to return the results. The role of the adapter is to provide a transparent interface for
clients to communicate with external servers. Adapter hides the system dependencies such as
communication facilities from the client. Adapter thus improves the scalability and
changeability of the system. The adapter enables the servers and clients to be distributed over
The benefits of the pattern can be mentioned like:
Good portability, since only microkernel need to be modified when porting the system
to a new environment.
High flexibility and extensibility, as modifications or extensions can be done by modifying
or extending internal servers.
Separation of low-level mechanisms (provided by microkernel and internal servers) and
higher-level policies (provided by external servers) improves maintainability and
changeability of the system.
There are some concerns about it as well.
The microkernel system requires much more inter-process communication inside one
application execution because of the calls to internal and external servers.
2. The design and implementation of the microkernel -based system is far more complex
than of a monolithic system