There is a need for customization and
the opportunity for customization is what spurred
operating systems designers to think of a
structure of the operating system that would
allow customization of the services and gave
birth to the idea of microkernel-based operating
system. As before, each of the applications
is in its own hardware address space,
the microkernel runs in a privileged mode of the architecture, and provides
simple abstractions such as threads, address
space, and inter-process communication. In other
words, small number of mechanisms are supported by the microkernel. The keyword
is mechanisms, there are no policies
ingrained in the microkernel, only mechanisms for
accessing hardware resources. The operating system services, such as virtual
memory management, CPU scheduling, file system, and so on that implemented as
servers on top of the microkernel. So in other words, these
system services execute with a same privilege as the applications themselves.
Each of the system service is in its own address space and it is protected from
one another and protected from the application and
the microkernel, being below this red line, is running
in privileged mode, it is protected from all
of the applications as well as the system services.
So in other words, we no longer have
that monolithic structure that we had before. Instead each
operating system service is in its
own hardware address space. In principle, there
is no distinction between regular applications and
the system services that are executing a
server processes on top of the microkernel.
Thus, we have very strong protection among
the applications, between the applications and system
services, among the system services and between
application system services and the microkernel. Now, the structure what
it entails is that you need the microkernel to provide
inter-process communication so that the applications
can request system services by contacting the servers and
the servers need to talk to one another as well. And in order
for them to talk to one another
they need inter-process communication as well. So
what have we gained by the structure? What we have gained by the structure
is extensibility. Because these OS services are implemented as service
processes, we can have replicated server processes with
different characteristics. For instance, this application may choose to use
this particular file system. Another application may
choose a different file system. No longer
do we have that one size fits
all characterization of the monolithic kernel. And this
is the biggest draw for the microkernel based design that it is easy to extend
the services that are provided with the
operating system to customize the services depending on
the needs of the application. This all sounds good, but is there a catch?