Spaces:
Configuration error
Configuration error
| /* | |
| * ELSA OS - Virtual Memory Manager Header | |
| * Temporal Epistemic Separation Kernel v0.4 | |
| * 2026-05-16 | |
| */ | |
| /* ============================================================ | |
| * PAGE CONSTANTS | |
| * ============================================================ */ | |
| /* ============================================================ | |
| * PAGE TABLE STRUCTURES (x86_64 4-level paging) | |
| * ============================================================ */ | |
| typedef struct { | |
| uint64_t entries[512]; | |
| } kernel_pt_t; | |
| typedef struct { | |
| uint64_t entries[512]; | |
| } kernel_pd_t; | |
| typedef struct { | |
| uint64_t entries[512]; | |
| } kernel_pdp_t; | |
| typedef struct { | |
| uint64_t entries[512]; | |
| } kernel_page_table_t; | |
| /* ============================================================ | |
| * ADDRESS SPACE | |
| * ============================================================ */ | |
| typedef int pid_t; | |
| typedef struct { | |
| kernel_page_table_t *pml4; | |
| uintptr_t base_virt; | |
| size_t size; | |
| pid_t pid; | |
| int refcount; | |
| } address_space_t; | |
| /* ============================================================ | |
| * BITMAP | |
| * ============================================================ */ | |
| typedef struct { | |
| uint8_t *bits; | |
| size_t num_bits; | |
| } bitmap_t; | |
| /* ============================================================ | |
| * VMM API | |
| * ============================================================ */ | |
| /* Initialization */ | |
| int vmm_init(uintptr_t phys_mem_start, size_t phys_mem_size, | |
| uintptr_t kernel_virt_base); | |
| /* Page mapping */ | |
| int vmm_map_page(kernel_page_table_t *pml4, uintptr_t virt, | |
| uintptr_t phys, uint64_t flags); | |
| int vmm_unmap_page(kernel_page_table_t *pml4, uintptr_t virt); | |
| /* Address space management */ | |
| address_space_t *vmm_create_address_space(void); | |
| int vmm_switch_address_space(address_space_t *as); | |
| void vmm_destroy_address_space(address_space_t *as); | |
| /* Copy-on-write */ | |
| int vmm_copy_on_write(address_space_t *src, address_space_t *dst, | |
| uintptr_t virt, size_t size); | |
| /* Page fault handler */ | |
| void vmm_page_fault_handler(uintptr_t fault_addr, uint64_t error_code); | |
| /* Kernel allocator */ | |
| void *vmm_kernel_alloc(size_t size); | |
| void vmm_kernel_free(void *ptr, size_t size); | |