30 lines
1,007 B
C
30 lines
1,007 B
C
#ifndef PMM_H
|
||
#define PMM_H
|
||
|
||
#include <stdint.h>
|
||
#include "multiboot.h"
|
||
|
||
#define PAGE_SIZE 4096
|
||
|
||
// Инициализация: передаем инфу от GRUB и адрес конца ядра из линкера
|
||
void pmm_init(struct multiboot_info* mbi, uint32_t kernel_end);
|
||
|
||
// Выделить одну страницу памяти (возвращает физический адрес)
|
||
void* pmm_alloc_page(void);
|
||
|
||
// Освободить страницу памяти по адресу
|
||
void pmm_free_page(void* addr);
|
||
|
||
typedef struct {
|
||
uint32_t total_memory; // Всего памяти в байтах
|
||
uint32_t used_memory; // Занято в байтах
|
||
uint32_t free_memory; // Свободно в байтах
|
||
uint32_t total_pages; // Всего страниц
|
||
uint32_t used_pages; // Занято страниц
|
||
uint32_t free_pages; // Свободно страниц
|
||
} pmm_stats_t;
|
||
|
||
void pmm_get_stats(void);
|
||
pmm_stats_t* pmm_get_stats_ptr(void);
|
||
|
||
#endif
|