Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
vm_manager.h
Go to the documentation of this file.
1#ifndef __MEMORY_VM_MANAGER_H__
2#define __MEMORY_VM_MANAGER_H__
4#include <spinlock.h>
5#include <type.h>
7#define KERNEL_BASE 0xFFFF800000000000ULL
8#define REGION_SIZE 0x0000008000000000ULL // 512 GB
9#define USER_STACK_VADDR 0x7FFFFFFFE000ULL
10#define USER_MMAP_BASE 0x100000000ULL
11
12typedef enum : uintptr_t {
13 VMA_REGION_A = KERNEL_BASE, // 0xFFFF800000000000
14 VMA_REGION_B = KERNEL_BASE + (REGION_SIZE * 1), // 0xFFFF808000000000
15 VMA_REGION_C = KERNEL_BASE + (REGION_SIZE * 2), // 0xFFFF810000000000
17 KERNEL_BASE + (REGION_SIZE * 3), // 0xFFFF818000000000
19 KERNEL_BASE + (REGION_SIZE * 4), // 0xFFFF820000000000
20
21 // Physical window bebas diletakkan jauh dari region di atas
22 mem_vma_phys_window_pt = 0xFFFFB00000000000ULL,
23 mem_vma_phys_window_start = 0xFFFFD00000000000ULL,
24
27
34
51
56
57struct rbt_node;
68
70 uintptr_t virt_addr, size_t size);
72void vma_unregister(struct virtual_memory_page* page, uintptr_t virt_addr);
74 mem_vma_region region, size_t size);
77
78#endif // __MEMORY_VM_MANAGER_H__
uintptr_t page
Definition paging.c:0
Definition rbt.h:26
struct virtual_memory_block * next
Definition vm_manager.h:32
uintptr_t phys_address
Definition vm_manager.h:30
struct rbt_node * tree
Definition vm_manager.h:62
struct virtual_memory_tree vma_tree_zone_c
Definition vm_manager.h:65
struct virtual_memory_tree vma_tree_zone_b
Definition vm_manager.h:64
struct virtual_memory_tree vma_tree_zone_process
Definition vm_manager.h:60
struct virtual_memory_tree vma_tree_zone_a
Definition vm_manager.h:61
struct virtual_memory_tree vma_tree_zone_kmodule
Definition vm_manager.h:66
struct virtual_memory_tree_node * parent
Definition vm_manager.h:46
struct virtual_memory_tree_node * next
Definition vm_manager.h:49
struct virtual_memory_tree_node * active
Definition vm_manager.h:53
struct virtual_memory_tree_node * unused
Definition vm_manager.h:54
uintptr_t phys_address
Definition vm_manager.h:39
uintptr_t end_address
Definition vm_manager.h:38
uintptr_t start_address
Definition vm_manager.h:37
unsigned long uintptr_t
Definition type.h:73
unsigned char uint8_t
Definition type.h:7
#define KERNEL_BASE
Definition vm_manager.h:7
struct virtual_memory_page * create_vmm_page()
Definition vm_manager.c:73
struct virtual_memory_page * get_kernel_vmm_page()
#define REGION_SIZE
Definition vm_manager.h:8
struct virtual_memory_block virtual_memory_block_t
Definition vm_manager.h:28
virtual_memory_t * vma_find(struct virtual_memory_page *page, uintptr_t virt_addr)
Definition vm_manager.c:117
uintptr_t vma_lookup_free_vaddr(struct virtual_memory_page *page, mem_vma_region region, size_t size)
Definition vm_manager.c:156
void vma_register(struct virtual_memory_page *page, uintptr_t phys_address, uintptr_t virt_addr, size_t size)
Definition vm_manager.c:101
void vma_unregister(struct virtual_memory_page *page, uintptr_t virt_addr)
Definition vm_manager.c:126
struct virtual_memory_tree __attribute__
struct virtual_memory virtual_memory_t
Definition vm_manager.h:35
uintptr_t phys_address
Definition vm_manager.h:2
mem_vma_region
Definition vm_manager.h:12
@ VMA_REGION_KMODULE
Definition vm_manager.h:16
@ VMA_REGION_A
Definition vm_manager.h:13
@ VMA_REGION_C
Definition vm_manager.h:15
@ mem_vma_phys_window_pt
Definition vm_manager.h:22
@ VMA_REGION_B
Definition vm_manager.h:14
@ mem_vma_phys_window_start
Definition vm_manager.h:23
@ VMA_REGION_PROCESS
Definition vm_manager.h:25
@ KALLOC_BASE_ADDR
Definition vm_manager.h:18
size_t size
Definition vnode.h:3