Learning outcomes
- Identify the common layers and major components used in operating systems.
- Understand how design choices (monolithic / layered / microkernel / modular) affect performance and maintainability.
Identify common layers and major system components used in operating systems, and understand how design choices (monolithic / layered / microkernel / modular) affect performance and maintainability.
The OS is a large software system. To make it understandable, debuggable, and extensible, designers organize it using structures (architectures) such as monolithic, layered, microkernel, and modular. Each design trades off speed, reliability, and ease of maintenance.
In a layered design, each layer uses the services of the layer below it and provides services to the layer above it. This helps with clarity and debugging, but can add overhead due to extra boundaries.
Apps → Shell/GUI → Services → Kernel → Drivers → Hardware
(Privileged / kernel-mode component)
In most OS designs the kernel internally includes sub-managers:
| Structure | Main idea | Trade-off |
|---|---|---|
| Monolithic | One big kernel — many OS services run in kernel space together. | Fast; but a kernel bug can crash the entire system. |
| Layered | OS divided into layers; each layer uses only the one below. | Cleaner design and easier debugging; can add overhead. |
| Microkernel | Minimal kernel; many services run in user space as separate processes. | More secure and robust isolation; performance may suffer due to message-passing overhead. |
| Modular | Small core kernel + loadable modules (drivers, file systems) added dynamically. | Flexible and common in modern OS; avoids recompiling the kernel for every change. |
Real operating systems often combine structures. Linux is monolithic for performance but also modular. Windows is largely monolithic but includes some microkernel-like behavior and supports dynamically loadable kernel modules.
A widely used design is the loadable kernel module approach: a core kernel links in additional services at boot time or during runtime.
User action: You plug in a USB drive while the OS is running.
This matches the layered path: Apps/UI → Services → Kernel → Drivers → Hardware.
If the kernel does not currently have the required driver loaded, Linux can dynamically load the module at runtime when the USB device is plugged in — without rebooting or recompiling the kernel.