Zuerst musst du logischerweise die Größe des Speichers ermitteln. (z.B. GRUB benutzen^^, oder BIOS Interrupts)
Dann merkst du dir irgentwie (Listen, Tabellen, Bitfelder, Stacks usw.) welche Pages belegt sind, und welche frei sind. Wie die Userlevel Programme den Heap verwalten kann dem Kernel ja egal sein. Es reicht ja, wenn man Systemcalls für "Pages allokieren" und "Page freigeben" hat.
Die Userlevelprogramme sowie der Kernel intern können dann Pages allokieren, und dann durch irgentwelche Strukturen speichern, welche Bereiche eine Page benutzt sind usw. Beispielsweise könnte man das durch doppelt verkettete Listen machen indem man diese Struktur vor jeden Speicherbereich stellt:
[code]typedef struct memory {
size_t size;
struct memory *prev;
struct memory *next;
} memory_t;