Most modern kernels, sometimes called "monolithic kernels," contain several million lines of code. For example, the Linux 3.0 kernel includes over 15 million lines. Microkernels, on the other hand, generally contain less than 10,000 lines of code. They are able to maintain a small size by loading most system processes in the user mode rather than the kernel itself.
A monolithic kernel may include device drivers, file system support, and inter-process communication (IPC) protocols for applications. A microkernel only includes basic system IPC protocols and memory management functions. Everything else is loaded in user mode (when a user logs on). This keeps the kernel size small and also provides a modular type of OS since custom drivers and file systems can be loaded by the kernel.
Microkernels were popular in the 1980s because of the memory and storage limitations of early computer systems. While they are still used for some server OSes, most major operating systems, such as Windows and OS X, use monolithic kernels.