There are roughly two types operating system that nowadays system uses: monolothic and microkernel.
It differs on where this two operating system's services located, basically.
Monolithic has all services lies on its kernel, using the same kernel's address space, which means, crash in monolithic can be catastrophic. It halts the entire PC.
Monolithic kernels can be compiled to be more modular, meaning that module can be inserted to and runs from the same space that handles core functionality (kernel space).
Example for this kind of operating system is Linux.
- Advantage: small, failed service can easily be restarted.
- Disadvantage: performance due to constant system call.
Taken from Wikipedia: a microkernel is a minimal computer operating system kernel which, in its purest form, provides no operating system services at all, only the mechanisms needed to implement such services, such as:
low-level address space management
inter-process communication (IPC).
So other OS services like file system, process management, or network protocols are running as user-level programs.
To be able to communicate between user-level program they use, for instance to a file system, you need to use the IPC (inter-process communication) from the OS.
Due to this circumstances, what in a monolithic kernel requires a single system call may require in a microkernel multiple system calls and context switches.
To elaborate this, when a program needs to use the disk, it needs to system call the IPC which will call the file system, subsequently, the file system, which a user-level program itself, needs to execute several system call before being able to get itself access to the disk.
An example of this OS would be MacOS.