Line 6:
Line 6:
The kernel runs in supervisor mode on the PowerPC, and performs the basic tasks of a microkernel. It is responsible for process isolation, memory management, and interrupt dispatching, as well as communication with [[IOSU]]. Cafe OS applications run as user mode processes, with separate address spaces and W^X memory protection. The kernel provides basic [[Cafe_OS_Syscalls|syscalls]] for running processes.
The kernel runs in supervisor mode on the PowerPC, and performs the basic tasks of a microkernel. It is responsible for process isolation, memory management, and interrupt dispatching, as well as communication with [[IOSU]]. Cafe OS applications run as user mode processes, with separate address spaces and W^X memory protection. The kernel provides basic [[Cafe_OS_Syscalls|syscalls]] for running processes.
+
+
===Processes===
+
A process in Cafe OS represents a single running application, with its own code, memory, and permissions. Cafe OS only executes the code of a single process at a time, but it can hold the data of multiple processes in memory simultaneously, and switch between them. Rather than allowing arbitrary process creation, there is RAM reserved for a single foreground app, a single background app, and various other special processes. Each running process is assigned a unique identifier called a RAMPID:
+
{| class="wikitable"
+
|-
+
! RAMPID
+
! Description
+
|-
+
| 0
+
| Cafe OS
+
|-
+
| 1
+
| root.rpx
+
|-
+
| 2
+
| ???
+
|-
+
| 3
+
| ???
+
|-
+
| 4
+
| Background app
+
|-
+
| 5
+
| Home Menu
+
|-
+
| 6
+
| Error display
+
|-
+
| 7
+
| Foreground app
+
|}
+
+
In addition to RAMPID, Cafe OS processes have another type of process ID called a fixed process ID (PFID). Rather than representing which part of memory a process occupies, PFID actually specifies which specific app/task is running.
===Loader===
===Loader===