From 3dbrew
Revision as of 23:39, 7 August 2016 by Neobrain (Talk | contribs) (Pathetic start of documenting the kernel scheduler, but somebody's gotta do it. Feel free to confirm and improve!)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

The kernel is the core of the operating system(s) running on the ARM9 and ARM11 CPUs. Among other things, it is responsible for memory management, access control, and process scheduling. It furthermore provides userland applications with fundamental functionality like memory allocation, multithreading, and interprocess communication.

The kernel is part of the system firmware and as such is initialized during the boot procedure.

The functionality provided by the kernel to userland applications is exposed via supervisor calls. Internally, the implementation of this ABI uses an object-oriented hierarchy of objects.

Low-level system information is exposed by the kernel via mapping the Configuration Memory page in all processes.


Little is known about the scheduler behavior of the 3DS kernel.

Threads on the ARM11 appcore seem to use cooperative multithreading, i.e. the only way for a CPU to be assigned to another thread is by invoking a system call. Most system calls trigger the scheduler, although some of them only conditionally do.

Threads on the ARM11 syscore have been hypothesized to use preemptive multithreading, but this is unconfirmed so far.

It is unknown how the ARM9 CPU core and the two remaining New3DS ARM11 cores are scheduled.