vmm: copy on write and changes to how page faults are handled

This commit is contained in:
Matheus
2023-08-02 01:18:35 -03:00
parent 55fc1b7026
commit 7e1443d032
4 changed files with 57 additions and 10 deletions
+11
View File
@@ -5,6 +5,7 @@
#include <logging.h>
#include <kernel/interrupt.h>
#include <kernel/vmm.h>
#include <arch/cpu.h>
#define ADDRMASK (uint64_t)0x7ffffffffffff000
#define PTMASK (uint64_t)0b111111111000000000000
@@ -162,6 +163,16 @@ void *arch_mmu_getphysical(pagetableptr_t table, void *vaddr) {
return (void *)(*entry & ADDRMASK);
}
bool arch_mmu_ispresent(pagetableptr_t table, void *vaddr) {
uint64_t *entry = get_page(table, vaddr);
return entry == NULL ? false : *entry & ARCH_MMU_FLAGS_READ;
}
bool arch_mmu_iswritable(pagetableptr_t table, void *vaddr) {
uint64_t *entry = get_page(table, vaddr);
return entry == NULL ? false : *entry & ARCH_MMU_FLAGS_WRITE;
}
void arch_mmu_switch(pagetableptr_t table) {
asm volatile("mov %%rax, %%cr3" : : "a"(table));
}