42_KFS/src/memory/page_table.c

19 lines
460 B
C

#include "memory.h"
void init_page_table(uint32_t page_table[1024], uint16_t start)
{
for (uint16_t i = start; i < 1024; i++)
page_table[i] = (i << 12) | 0x03;
}
int16_t create_page_table(uint16_t pd_index)
{
void *frame = alloc_frames(PAGE_SIZE);
if (!frame)
return -1;
page_directory[pd_index] = ((uint32_t)frame & PAGE_MASK) | 0x03;
uint32_t *page_table = (uint32_t *)((PT_START + pd_index) * 1024);
init_page_table(page_table, 0);
return 0;
}