Kernel processes / multitasking

This commit is contained in:
2025-08-30 23:47:25 +02:00
parent 60a530b900
commit 0273330cf4
22 changed files with 381 additions and 56 deletions

View File

@ -12,26 +12,42 @@
VirtMem VIRT_MEM;
void vmm_map_kern_page(uint64_t virtaddr, uint64_t physaddr, uint32_t flags) {
spinlock_acquire(&VIRT_MEM.spinlock);
#if defined(__x86_64__)
hal_vmm_map_page(KERNEL_CR3, virtaddr, physaddr, flags);
#else
# error "arch"
#endif
spinlock_release(&VIRT_MEM.spinlock);
}
void vmm_unmap_kern_page(uint64_t virtaddr, uint64_t physaddr) {
spinlock_acquire(&VIRT_MEM.spinlock);
#if defined(__x86_64__)
hal_vmm_unmap_page(KERNEL_CR3, virtaddr, physaddr);
#else
# error "arch"
#endif
spinlock_release(&VIRT_MEM.spinlock);
}
void vmm_map_kern_range(void *virtstart, void *physstart, size_t size, uint32_t flags) {
spinlock_acquire(&VIRT_MEM.spinlock);
#if defined(__x86_64__)
hal_vmm_map_range(KERNEL_CR3, virtstart, physstart, size, flags);
#endif
spinlock_release(&VIRT_MEM.spinlock);
}
void vmm_unmap_kern_range(void *virtstart, void *physstart, size_t size, uint32_t flags) {
spinlock_acquire(&VIRT_MEM.spinlock);
#if defined(__x86_64__)
hal_vmm_unmap_range(KERNEL_CR3, virtstart, physstart, size, flags);
#endif
spinlock_release(&VIRT_MEM.spinlock);
}
void vmm_init(void) {
spinlock_init(&VIRT_MEM.spinlock);
hal_vmm_init();
LOG("vmm", "init\n");
}