[feat] Memory manager

This commit is contained in:
2026-05-24 19:36:50 +08:00
Unverified
parent 690782eae9
commit 4fc02d296f
9 changed files with 593 additions and 20 deletions
+9
View File
@@ -0,0 +1,9 @@
#pragma once
#include <efi.h>
void init_heap();
void* kmalloc(UINTN size);
void kfree(void* ptr);
void* kcalloc(UINTN num, UINTN size);
void* krealloc(void* ptr, UINTN new_size);
+25
View File
@@ -0,0 +1,25 @@
#pragma once
#include <efi.h>
#define PAGE_SIZE 4096
#define PAGE_SHIFT 12
#define PAGE_MASK (~(PAGE_SIZE - 1ULL))
typedef struct {
UINT8* bitmap;
UINTN bitmap_size;
UINTN total_pages;
UINTN free_pages;
void* free_list_head;
UINT64 base_addr;
UINT64 max_addr;
} pmm_t;
extern pmm_t g_pmm;
EFI_STATUS pmm_init();
void* pmm_alloc_pages(UINTN n);
void pmm_free_pages(void* addr, UINTN n);
UINTN pmm_get_free_count();
BOOLEAN pmm_is_page_free(void* addr);
+1
View File
@@ -12,4 +12,5 @@ extern serial_context g_serial;
void serial_init(EFI_SERIAL_IO_PROTOCOL *SerialIo); // 初始化串行驱动
void serial_write(const char *str); // 往串行写string
void serial_write_char(char c); // 往串行写char(不推荐使用)
void serial_write_hex(UINTN val); // 往串行写十六进制数字
char serial_read_char(); // 读串行