merge branch memory-shit into higher-half

This commit is contained in:
2025-05-10 15:48:10 +03:00
parent 65f543fa92
commit 767e74976f
14 changed files with 419 additions and 178 deletions
+17
View File
@@ -22,10 +22,23 @@
#define GET_PGDIR(address) ((uint32_t)((address) >> 22) & 0x3FF)
#define GET_PGTBL(address) ((uint32_t)((address) >> 12) & 0x3FF)
#define PAGE_SIZE 0x1000 // 4 КБ
// Общий размер памяти
#define MEMORY_SIZE (0xFFFFFFFF-0xC0000000)
// Количество страниц
#define PAGE_COUNT (MEMORY_SIZE / PAGE_SIZE)
// Размер битмапа в байтах (округлено вверх)
#define BITMAP_SIZE (PAGE_COUNT / 8)
extern uint32_t kernel_page_directory[1024] __attribute__((aligned(4096)));
extern uint32_t kernel_page_table[1024] __attribute__((aligned(4096)));
extern uint32_t user_page_table[1024] __attribute__((aligned(4096)));
extern uint32_t *kpage_dir;
//paging.c
void grub_memory_map(unsigned int magic, struct multiboot_info* mbi);
void enablePaging();
@@ -34,13 +47,17 @@ void paging_init();
void test_paging();
//page_alloc.c
void set_bit(uint32_t page_index);
void clear_bit(uint32_t page_index);
void init_allocator();
void* alloc_page();
void free_page(void* physaddr);
//page_tables.c
void *get_physaddr(void *virtualaddr);
uint32_t get_pte(void *virtualaddr);
void map_page(void* physaddr, void* virtualaddr, unsigned int flags);
void unmap_page(void *virtualaddr);
void map_kernel_page(void* virtualaddr, unsigned int flags);
void* setup_user_process(void* user_code_phys, uint32_t* user_stack_top);