Alvoradozerouno's picture
ELSA OS Phase 1: VMM (Virtual Memory Manager)
b8ce165
Raw
History Blame Contribute Delete
2.99 kB
/*
* ELSA OS - Virtual Memory Manager Header
* Temporal Epistemic Separation Kernel v0.4
* 2026-05-16
*/
#ifndef ELSA_VMM_H
#define ELSA_VMM_H
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
/* ============================================================
* PAGE CONSTANTS
* ============================================================ */
#define PAGE_SIZE 0x1000ULL /* 4KB */
#define PAGE_SIZE_2MB 0x200000ULL /* 2MB */
#define PAGE_SIZE_1GB 0x40000000ULL /* 1GB */
#define PAGE_FLAG_PRESENT 0x001ULL
#define PAGE_FLAG_WRITE 0x002ULL
#define PAGE_FLAG_USER 0x004ULL
#define PAGE_FLAG_HUGE 0x080ULL
#define PAGE_FLAG_GLOBAL 0x100ULL
#define PAGE_FLAG_NX (1ULL << 63)
#define PAGE_ADDR_MASK 0x000FFFFFFFFFF000ULL
#define PAGE_ADDR_MASK_2MB 0x000FFFFFFFE00000ULL
#define HIGHER_HALF_BASE 0xFFFF800000000000ULL
#define USER_SPACE_BASE 0x0000000000000000ULL
#define USER_SPACE_SIZE 0x0000800000000000ULL /* 128TB user space */
/* ============================================================
* 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);
#endif /* ELSA_VMM_H */