Also zuerst mal: malloc() ist im Normalfall eine Bibliotheksfunktion im Userspace und hat folglich mit dem Kernel nichts zu tun. Der Kernel stellt meist Syscalls zur verfuegung, die nur mit ganzen Pages arbeiten.
Was diese Syscalls genau machen, hängt von dem Konzept zur verwaltung von dynamischem Prozessspeicher ab. Dabei gibt es Grundsätzlich 2 Möglichkeiten. Korona hat die imo ein wenig durcheinander gebracht.
Bei der ersten Methode stellt der Kernel mal grundsätzlich 2 Syscalls zur Verfügung, die beispielsweise so aussehen: void* allocate_pages(size_t bytes); und void free_pages(void* base, size_t bytes); Der erste Syscall alloziert hierbei die nötigen physischen Seiten und mappt sie irgendwo (in einem bestimmten Berei) in den Adressraum des Prozesses. Der zweite Syscall gibt eine oder mehrere Seiten von einer Adresse an frei.
Die zweite Methode wäre die Methode mit Heap. Dabei steht dem Prozess ein Speicherbereich zur verfügung, den er per Sycalls (nahezu) beliebig dehnen und zusammenstauchen kann. Das wäre, die von Korona erwähnte Methode mit den *brk(); Was diese funktionen genau machen, kannst du bei Bedarf in den Manpages nachlesen. Wichtig ist vorallem, dass du das Prinzip begriffen hast, wie du das dann genau umsetzt, ist dir überlassen.
So, ich hoffe du verstehst in etwa was ich sagen will.
Falls noch Fragen dazu offen sind, stell sie ruhig.