The modules of the basic monolithic kernel architecture presented are:
- Spinlocks: (hopefully) efficient spinlock implementations
- Debugging infrastructure: exactly what it sounds like
- Multiboot/meminfo: provides a physical memory map
- Physical page allocator: provides "next-available-page" functionality
- Virtual page manager: provides "map physical page to virtual address" functionality
- Physical page registry: provides "how many virtual pages are mapped to this physical page"-type functionality
- GDT entry manager: self-explanatory
- Kernel heap: kernel heap for both long-lived and short-lived small objects
- Kernel data structures: hash table, binary tree, etc. implementations
- SMP initialization: boots up APs and enters scheduler
- Execution context management: provides "switch-to-thread", including context switching
- Permissions system: provides answers to "is X allowed to do Y?"
- Scheduler: who gets to run on the processor now?
- Synchronization primitives: semaphore, mutex implementation
- System clock: provides both long-term date handling as well as ns-precision timers
- RTC: interfaces with the Real-Time Clock
- Interrupt handling: interrupt routing
- Kernel watchdog: prevents the kernel from locking up
- Local APIC wrapper: provides local APIC functionality without requiring constant documentation references
- IRQ handling: what it sounds like
- I/O APIC wrapper: provides I/O APIC functionality without requiring constant documentation references
- HAL: Hardware Abstraction Layer, used to provide common interface for driver-independent access to hardware
- DDI: Device Driver Interface, common set of functionality and interface for hardware drivers to register themselves
- Drivers: the actual hardware drivers themselves
- VFS: Virtual File System, self-explanatory
- Filesystems: the transitions between "read this sector" and "open a file with this name"
- ACPI: Advanced Configuration and Power Interface, used to get information on things like SMP processors and the PCI bus
Very roughly speaking, here are the dependencies between the modules:
In reality, this presented material will be much simplified to fit the time constraints. The result will probably look more like: