The microkernel itself contains very little
hardware- or system-specific code. The code that determines
the capabilities of the system is isolated in a startup
program, which is responsible for initializing the system,
determining available memory, etc. Information gathered is
placed into a memory table available to the microkernel and
to all processes (on a read-only basis).
The
startup-x86
program is designed to work on systems that support the Unified Extensible Firmware Interface.
This startup program is responsible for:
- determining the number of processors
- determining the address of the local and I/O APIC
- initializing each additional processor
After a reset, only one processor will be executing the reset
code. This processor is called the
boot processor
(BP). For each additional processor found, the BP running
the
startup-x86 code will:
- initialize the processor
- switch it to 32-bit protected mode
- allocate the processor its own page directory
- set the processor spinning with interrupts disabled,
waiting to be released by the kernel