What's Next?
Congratulations
You have implemented the core data structures of a real operating system:
- Processes: PCB, state machine, fork, round-robin scheduler
- Memory: virtual address parsing, page tables, slab allocator
- File System: inodes, file descriptor tables, FAT chains
- IPC: ring buffers, semaphores, signal dispatch tables
- Syscalls: syscall table, sys_write
These are not abstractions — they are the actual patterns used in linux/sched.h, mm/slab.c, fs/inode.h, and kernel/signal.c.
Go Deeper
- Read the kernel source — elixir.bootlin.com lets you browse the Linux source online with cross-references. Start with
include/linux/sched.h(task_struct) andmm/slab.c. - Write a kernel module — A kernel module is a C file you compile and load into a running kernel. The classic first module: a character device that returns "hello" when read.
- Explore xv6 — MIT's teaching operating system, written in C for RISC-V. It implements everything you learned here in ~8,000 lines: github.com/mit-pdos/xv6-riscv.
- Read Operating Systems: Three Easy Pieces — Free online OS textbook covering virtualization, concurrency, and persistence in depth: ostep.org.
- Try the Linux kernel labs — linux-kernel-labs.github.io has hands-on exercises for kernel development.
References
- Linux Kernel Development by Robert Love — The best single-volume guide to the kernel internals.
- Understanding the Linux Kernel by Bovet & Cesati — Deep dive into kernel mechanisms.
- The Linux Kernel documentation — Official docs, including subsystem-specific guides.