今天的任務是在昨天建立的虛擬內存管理(VMM)之上,構建一個 1MB 大小的內核堆疊 (Kernel Heap)。透過實作 kmalloc 與 kfree,內核現在具備了動態申請與釋放任意大小內存塊的能力,這標誌著 SmallOS 擁有了靈活管理資源的「大腦」。
在內核中,我們不能直接使用頁級分配(4KB)來處理細微的數據結構。我們需要一個分配器來管理一塊連續的虛擬空間(本階段為 1MB)。
我們使用雙向鏈表來追蹤堆疊中的每一塊內存。每一塊內存都有一個頭部(Header),記錄了:
當調用 kmalloc 時,分配器會遍歷鏈表尋找足夠大的空閒塊。
kfree 的核心挑戰在於防止記憶體碎片化(Fragmentation)。
kmalloc 請求因為找不到足夠大的連續空間而失敗,我們會啟動全內存掃描,嘗試將所有相鄰的空閒塊重新合併,以最大化連續可用空間。