OS Generations, Boot, Services, Interfaces & System Calls
Press Next → or use ← → arrow keys
Five Generations of Operating Systems
Operating systems evolved the same way. Every generation solved the biggest frustration of the era before it, moving computing steadily closer to ordinary people and further from the raw hardware.
Batch fixed one-job-at-a-time waiting. Time-sharing added interactivity. The GUI removed the steep learning curve. Cloud removed the burden of owning hardware. Same direction, five times over.
Eighty Years at a Glance
The pulse of light travelling the timeline is the whole story: a room-filling ENIAC with no OS at one end, a phone orchestrated by cloud-scale software at the other — all in a single human lifetime.
What Each Generation Changed
System Boot — From Power Button to Login
The CPU is hard-wired to fetch from a fixed ROM address (
0xFFFFFFF0 on x86-64), where the
BIOS/UEFI firmware lives. A tiny bit of ROM loads a small bootloader from disk, which
loads the huge kernel, which starts userspace. Each stage bootstraps the next — like
pulling yourself up by your own bootstraps.
dmesg | head -20 shows the kernel's boot messages, systemd-analyze times
each stage, and [ -d /sys/firmware/efi ] tells you whether you booted UEFI or legacy BIOS.
The Live Boot Sequence
The spark travels top to bottom: hardware wakes firmware, firmware loads the bootloader, the
bootloader loads the kernel, the kernel starts init, and init brings you a
login screen. Six hand-offs from silicon to desktop.
BIOS vs UEFI
| Feature | BIOS (legacy, 1975–2015) | UEFI (modern, 2005–now) |
|---|---|---|
| Bit mode | 16-bit real mode | 64-bit |
| RAM limit | 1 MB | Full RAM & hardware |
| Boot source | MBR — first 512 bytes | EFI System Partition (.efi) |
| Max disk size | 2 TB (32-bit LBA) | 9.4 ZB (GPT) |
| Security | No Secure Boot | Secure Boot (signature checks) |
| Interface | Text menu, keyboard only | GUI, mouse, network boot |
UEFI isn't just prettier firmware — it unlocks disks larger than 2 TB, boots in 64-bit from the start, adds network booting, and verifies the bootloader's cryptographic signature with Secure Boot so malware can't hijack the earliest code that runs.
The OS Service Constellation
User-facing: UI, program execution, I/O, file system, communication, error detection. System-facing: resource allocation, accounting, protection & security. Programs reach them through system calls; humans reach them through interfaces.
Every Service, Grouped
| Service | Family | What it does |
|---|---|---|
| User Interface | User | CLI, GUI or touch — human ↔ machine |
| Program Execution | User | Load a binary, run it, terminate cleanly |
| I/O Operations | User | Uniform interface to disk, network, keyboard |
| File-System | User | Files, directories, permissions, search |
| Communication | User | Pipes, sockets, shared memory, IPC |
| Error Detection | User | Hardware faults, memory errors, bad operations |
| Resource Allocation | System | Share CPU, RAM, disk among processes |
| Accounting | System | Track usage per user for billing/planning |
| Protection & Security | System | Isolate processes, authenticate users |
Same Task, Four Interfaces
The CLI creates 99 folders in one line in under a second — unbeatable for admins and servers. The GUI is discoverable and forgiving for everyday work. Touch and voice put the OS in your pocket and your living room. There's also the API — the interface programs use, not humans.
System Calls — The Doorway to the Kernel
The syscall instruction (or svc on ARM64) is the only
way to flip from user mode to kernel mode. It atomically sets the mode bit and jumps to a fixed kernel
entry point. Try to flip that bit yourself and the hardware raises a fault — the OS kills the process.
API ≠ System Call
| Layer | What it is | Example |
|---|---|---|
| Application | Your program | printf("Hi") |
| API (library) | Portable wrapper | glibc write() |
| System call | Actual kernel entry | syscall #1 on Linux x86-64 |
| Kernel routine | The handler | Linux sys_write() |
| Hardware | Device driver | tty driver → terminal |
RDI, RSI, RDX, R10, R8, R9 on Linux x86-64.
int 0x80).
Six Streams Into the Kernel
Every request from every program lands in one of these six buckets. Once you know them, a syscall table from Linux, Windows or macOS stops being a wall of names and starts making sense.
The Six Categories (Galvin)
| Category | Purpose | Linux | Windows |
|---|---|---|---|
| ① Process Control | Create, end, wait, load, run | fork, execve, wait, exit | CreateProcess |
| ② File Management | Create, open, read, write, close | open, read, write, close | CreateFile, ReadFile |
| ③ Device Mgmt | Request/release, get/set attrs | ioctl, read /dev/* | DeviceIoControl |
| ④ Info Maintenance | Time, date, PID, sysinfo | getpid, time, uname | GetSystemTime |
| ⑤ Communication | Connections, messages, IPC | pipe, socket, send, shmget | CreatePipe, socket |
| ⑥ Protection | Access control, permissions | chmod, chown, setuid | SetFileSecurity |
System Programs — Between You and the Syscall
You rarely make raw system calls. Instead you run system programs — the utilities bundled with the OS that wrap syscalls in friendly commands.
cp · mv · rm · ls · mkdirdate · ps · top · df · uptimenano · vim · sed · awkgcc · python · make · gdbld · dynamic loader · lddssh · curl · ping · mailsystemd · cron · sshdTrace echo hi All the Way Down
read() from stdin — File Management.fork() — Process Control.execve("/bin/echo", …) — Process Control (kernel loads the binary).echo calls write(1, "hi\n", 3) — File Management (fd 1 = stdout).echo calls exit_group(0) — Process Control (kernel reclaims memory).wait4() returns — Process Control; the prompt reappears.
One word triggers at least six syscalls across two of Galvin's categories. See it yourself with
strace on Linux, dtruss on macOS, or Process Monitor on Windows — every
interactive command is a little conversation with the kernel.
Eight Ideas Worth Remembering
strace is the fastest way to truly understand an OS.From Power Button to Kernel Doorway
From the history that shaped operating systems, through the six-stage boot, the services they offer
and the interfaces we use, all the way down to the single guarded syscall instruction —
you can now trace any command from a keystroke to the kernel and back.
Try strace on your own commands, read man 2 syscalls, and time your boot with
systemd-analyze blame. Then dive into process scheduling and
memory management to see what the kernel does once you're inside.
⚙️ End of tutorial · Press ← to review, or click Restart