void page_fault_handler(void)
{
uint32_t addr = p->fault_addr;
uint32_t code = p->error_code;
int pageno = page_alloc(0);
ppage_t* page = &page_map[pageno];
// This fills the page with data
page_read_in(pageno);
uint32_t pd_idx = get_directory_index(addr);
uint32_t pt_idx = get_table_index(addr);
uint32_t* pd = (uint32_t*) p->page_directory;
uint32_t* pt = pd[pd_idx] & 0xfffff000;
// Set the page to present
pt[pt_idx] |= PE_P | (page->paddr & 0xfffff000);
flush_tlb_entry(addr);
}