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__
3
4
#include <
spinlock.h
>
5
#include <
type.h
>
6
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
12
typedef
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
16
VMA_REGION_KMODULE
=
17
KERNEL_BASE
+ (
REGION_SIZE
* 3),
// 0xFFFF818000000000
18
KALLOC_BASE_ADDR
=
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
25
VMA_REGION_PROCESS
= 0x400000,
26
}
mem_vma_region
;
27
28
typedef
struct
virtual_memory_block
virtual_memory_block_t
;
29
struct
virtual_memory_block
{
30
uintptr_t
phys_address
;
31
uintptr_t
pml4_base
;
32
struct
virtual_memory_block
*
next
;
33
};
34
35
typedef
struct
virtual_memory
virtual_memory_t
;
36
struct
virtual_memory
{
37
uintptr_t
start_address
;
38
uintptr_t
end_address
;
39
uintptr_t
phys_address
;
40
size_t
length
;
41
int
flags
;
42
int
core
;
43
}
__attribute__
((aligned(64)));
44
45
struct
virtual_memory_tree_node
{
46
struct
virtual_memory_tree_node
*
parent
;
47
uintptr_t
start_address
;
48
uintptr_t
end_address
;
49
struct
virtual_memory_tree_node
*
next
;
50
}
__attribute__
((aligned(8)));
51
52
struct
virtual_memory_tree
{
53
struct
virtual_memory_tree_node
*
active
;
54
struct
virtual_memory_tree_node
*
unused
;
55
};
56
57
struct
rbt_node
;
58
struct
virtual_memory_page
{
59
spinlock_t
lock
;
60
struct
virtual_memory_tree
vma_tree_zone_process
;
61
struct
virtual_memory_tree
vma_tree_zone_a
;
62
struct
rbt_node
*
tree
;
63
uint8_t
_pad
[6];
64
struct
virtual_memory_tree
vma_tree_zone_b
;
65
struct
virtual_memory_tree
vma_tree_zone_c
;
66
struct
virtual_memory_tree
vma_tree_zone_kmodule
;
67
}
__attribute__
((aligned(64)));
68
69
void
vma_register
(
struct
virtual_memory_page
*
page
,
uintptr_t
phys_address
,
70
uintptr_t
virt_addr,
size_t
size
);
71
virtual_memory_t
*
vma_find
(
struct
virtual_memory_page
*
page
,
uintptr_t
virt_addr);
72
void
vma_unregister
(
struct
virtual_memory_page
*
page
,
uintptr_t
virt_addr);
73
uintptr_t
vma_lookup_free_vaddr
(
struct
virtual_memory_page
*
page
,
74
mem_vma_region
region,
size_t
size
);
75
struct
virtual_memory_page
*
get_kernel_vmm_page
();
76
struct
virtual_memory_page
*
create_vmm_page
();
77
78
#endif
// __MEMORY_VM_MANAGER_H__
page
uintptr_t page
Definition
paging.c:0
spinlock.h
rbt_node
Definition
rbt.h:26
spinlock_t
Definition
spinlock.h:10
virtual_memory_block
Definition
vm_manager.h:29
virtual_memory_block::pml4_base
uintptr_t pml4_base
Definition
vm_manager.h:31
virtual_memory_block::next
struct virtual_memory_block * next
Definition
vm_manager.h:32
virtual_memory_block::phys_address
uintptr_t phys_address
Definition
vm_manager.h:30
virtual_memory_page
Definition
vm_manager.h:58
virtual_memory_page::tree
struct rbt_node * tree
Definition
vm_manager.h:62
virtual_memory_page::vma_tree_zone_c
struct virtual_memory_tree vma_tree_zone_c
Definition
vm_manager.h:65
virtual_memory_page::vma_tree_zone_b
struct virtual_memory_tree vma_tree_zone_b
Definition
vm_manager.h:64
virtual_memory_page::lock
spinlock_t lock
Definition
vm_manager.h:59
virtual_memory_page::vma_tree_zone_process
struct virtual_memory_tree vma_tree_zone_process
Definition
vm_manager.h:60
virtual_memory_page::_pad
uint8_t _pad[6]
Definition
vm_manager.h:63
virtual_memory_page::vma_tree_zone_a
struct virtual_memory_tree vma_tree_zone_a
Definition
vm_manager.h:61
virtual_memory_page::vma_tree_zone_kmodule
struct virtual_memory_tree vma_tree_zone_kmodule
Definition
vm_manager.h:66
virtual_memory_tree_node
Definition
vm_manager.h:45
virtual_memory_tree_node::parent
struct virtual_memory_tree_node * parent
Definition
vm_manager.h:46
virtual_memory_tree_node::next
struct virtual_memory_tree_node * next
Definition
vm_manager.h:49
virtual_memory_tree_node::end_address
uintptr_t end_address
Definition
vm_manager.h:48
virtual_memory_tree_node::start_address
uintptr_t start_address
Definition
vm_manager.h:47
virtual_memory_tree
Definition
vm_manager.h:52
virtual_memory_tree::active
struct virtual_memory_tree_node * active
Definition
vm_manager.h:53
virtual_memory_tree::unused
struct virtual_memory_tree_node * unused
Definition
vm_manager.h:54
virtual_memory
Definition
vm_manager.h:36
virtual_memory::phys_address
uintptr_t phys_address
Definition
vm_manager.h:39
virtual_memory::end_address
uintptr_t end_address
Definition
vm_manager.h:38
virtual_memory::flags
int flags
Definition
vm_manager.h:41
virtual_memory::core
int core
Definition
vm_manager.h:42
virtual_memory::start_address
uintptr_t start_address
Definition
vm_manager.h:37
virtual_memory::length
size_t length
Definition
vm_manager.h:40
type.h
uintptr_t
unsigned long uintptr_t
Definition
type.h:73
uint8_t
unsigned char uint8_t
Definition
type.h:7
KERNEL_BASE
#define KERNEL_BASE
Definition
vm_manager.h:7
create_vmm_page
struct virtual_memory_page * create_vmm_page()
Definition
vm_manager.c:73
get_kernel_vmm_page
struct virtual_memory_page * get_kernel_vmm_page()
REGION_SIZE
#define REGION_SIZE
Definition
vm_manager.h:8
virtual_memory_block_t
struct virtual_memory_block virtual_memory_block_t
Definition
vm_manager.h:28
vma_find
virtual_memory_t * vma_find(struct virtual_memory_page *page, uintptr_t virt_addr)
Definition
vm_manager.c:117
vma_lookup_free_vaddr
uintptr_t vma_lookup_free_vaddr(struct virtual_memory_page *page, mem_vma_region region, size_t size)
Definition
vm_manager.c:156
vma_register
void vma_register(struct virtual_memory_page *page, uintptr_t phys_address, uintptr_t virt_addr, size_t size)
Definition
vm_manager.c:101
vma_unregister
void vma_unregister(struct virtual_memory_page *page, uintptr_t virt_addr)
Definition
vm_manager.c:126
__attribute__
struct virtual_memory_tree __attribute__
virtual_memory_t
struct virtual_memory virtual_memory_t
Definition
vm_manager.h:35
phys_address
uintptr_t phys_address
Definition
vm_manager.h:2
mem_vma_region
mem_vma_region
Definition
vm_manager.h:12
VMA_REGION_KMODULE
@ VMA_REGION_KMODULE
Definition
vm_manager.h:16
VMA_REGION_A
@ VMA_REGION_A
Definition
vm_manager.h:13
VMA_REGION_C
@ VMA_REGION_C
Definition
vm_manager.h:15
mem_vma_phys_window_pt
@ mem_vma_phys_window_pt
Definition
vm_manager.h:22
VMA_REGION_B
@ VMA_REGION_B
Definition
vm_manager.h:14
mem_vma_phys_window_start
@ mem_vma_phys_window_start
Definition
vm_manager.h:23
VMA_REGION_PROCESS
@ VMA_REGION_PROCESS
Definition
vm_manager.h:25
KALLOC_BASE_ADDR
@ KALLOC_BASE_ADDR
Definition
vm_manager.h:18
size
size_t size
Definition
vnode.h:3
kernel
memory
vm_manager.h
Generated on Sat May 30 2026 11:09:57 for Voxia OS by
1.13.2