currsos/inc/vmm.h

65 lines
1.1 KiB
C

#pragma once
/* Virtual memory management header */
#include "cdef.h"
#include "memory_layout.h"
#include "llist.h"
#include "pmm.h"
#include "spin_lock.h"
typedef uintptr vaddr;
typedef struct llist vmll;
typedef struct llist_node vm_node;
typedef struct virtual_page
{
vaddr address; // Init to 0x0
vaddr table_ptr;
vmll allocs; // Linked list of vm_atom
uint64 free;
uint8 status;
} vm_object;
typedef struct allocation
{
usize offset;
usize size;
vm_object *page_ptr;
} vm_atom;
typedef struct page_table
{
uint64 id;
usize size;
usize free;
vm_atom *map;
} vm_unit;
typedef struct allocation_sector
{
uint64 start;
uint64 end;
vm_object **actbck;
vm_object **resbck;
vm_object *largest_free;
uint16 dirty;
} vm_sector;
typedef struct page_table_entries
{
vm_unit *groups;
vm_sector sectors[3];
vm_object *pages;
vmll *global_alloc;
usize free_frames;
} vmem;
void init_vm();
void vm_issue_unit(uint64 id, usize size);
void *kalloc(usize size);
void kfree(void *ptr);