I did some homework on microkernels and got some baisc concepts clear.Basically, a microkernel is a type of design where only certain parts of the code is in kernel space and the remaining go to the user space, as servers. What is to remain in the kernel space and what in the user space is the decision of the developer.But one thing that always remains in the kernle space is the process management and IPC related stuff.
Other common features like memory management, file system and the I/O handling etc. can be put up as servers in the user space. It is also possible to bring the file system in to the kernel space for a faster approach.In microkernels, the major way of message passing is through Inter-Process Communication(IPC).
Coming to the concept of servers, they are like any other programs with some extra privileges, to access the memory, granted by the kernel.There are two types of approaches in implementing the kernel. They are monoserver and multiserver systems. In monoserver systems, all the device drivers(called tasks), file system handling, memory management etc that are to be put up in the user space are put as one single module and is linked to the kernel.
In the multiserver approach, each of these are put as separate servers and interconnected and connected to the kernel. The way they are split in to is decided by the designer.One approach is to put all the device drivers into one server, file system in to one server and memory management in to another server and connect them all.
The major downside of the microkernel design is its performance. Because of the necessity for IPC for interacting with the kernel, these are generally slower than monolithic kernels.The advantages include maintainability, reliability and improved security.