Monolithic Kernel:
The entire O.S. is placed inside the kernel
It runs as a single large process
As all the services are placed inside the kernel, they have a single address space
It is bigger in size
It is easy to implement/code
Performance is high (As kernel can invoke any function directly as everything is placed in the kernel)
Less Secure (If one service fails, entire system crashes)
Micro-kernel:
Only bare minimum code is placed inside the kernel (only basic memory management and Inter Process Communication code)
Here the kernel is broken down into processes called as servers
As services(Servers provide services) are separated they have different address spaces
It is smaller in size
It is tough to implement/code
Performance is low (As servers are separated, so to invoke services from other servers IPC(Inter Process Communication) is needed which requires kernel's permission and thus increases access time and lowers the performance)
More Secure (Even if one service crashes, others can function properly because of separation)