Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
slab.h
Go to the documentation of this file.
1#ifndef __MEMORY_SLAB_H__
2#define __MEMORY_SLAB_H__
4#include <type.h>
5#include <spinlock.h>
7// Forward declarations
8struct slab {
9 uint32_t magic; // For validation
10 struct slab* next; // Next slab in the list
11 void* first_obj; // Pointer to first object in slab
12 void* free_list; // List of free objects
13 size_t total_objects; // Total objects in this slab
14 size_t free_objects; // Number of free objects
15 uintptr_t phys_addr; // Physical address of the page for this slab
16} __attribute__((aligned(64)));
18struct slab_cache {
19 spinlock_t lock; // Spinlock for SMP thread safety
20 char name[32]; // Name of the cache
21 size_t obj_size; // Size of each object
22 size_t actual_obj_size; // Properly aligned object size
23 size_t alignment; // Alignment requirement
24 size_t slab_size; // Size of each slab
25
26 struct slab* slabs_full; // Slabs with no free objects
27 struct slab* slabs_partial; // Slabs with some free objects
28 struct slab* slabs_free; // Slabs with all objects free
29
30 size_t total_slabs; // Total number of slabs
31 size_t total_objects; // Total objects across all slabs
32 size_t free_objects; // Total free objects
33
35 phys_addr; // Physical address of the cache (needed for destroying)
36 uintptr_t current_virt_addr; // Virtual address of the cache
38} __attribute__((aligned(64)));
39
40void vxCreateSlabCache(struct slab_cache** cache, const char* name,
41 const size_t obj_size, size_t alignment,
42 const uintptr_t virt_addr);
44void* vxSlabAlloc(struct slab_cache* cache);
45void slab_free(struct slab_cache* cache, void* obj);
46void slab_cache_stats(struct slab_cache* cache, size_t* total_objs,
47 size_t* used_objs, size_t* free_objs);
48
49#endif // __MEMORY_SLAB_H__
kstring name
Definition dentry.h:5
typedef __attribute__
Definition msi.c:47
struct process_node cache
Definition process.h:10
void * vxSlabAlloc(struct slab_cache *cache)
Definition slab.c:93
void slab_cache_destroy(struct slab_cache **cache)
Definition slab.c:174
void slab_free(struct slab_cache *cache, void *obj)
Definition slab.c:235
size_t alignment
Definition slab.h:4
size_t obj_size
Definition slab.h:2
void vxCreateSlabCache(struct slab_cache **cache, const char *name, const size_t obj_size, size_t alignment, const uintptr_t virt_addr)
Definition slab.c:44
void slab_cache_stats(struct slab_cache *cache, size_t *total_objs, size_t *used_objs, size_t *free_objs)
size_t obj_size
Definition slab.h:21
struct slab * slabs_free
Definition slab.h:28
size_t slab_size
Definition slab.h:24
size_t actual_obj_size
Definition slab.h:22
struct slab * slabs_partial
Definition slab.h:27
spinlock_t lock
Definition slab.h:19
uintptr_t current_virt_addr
Definition slab.h:36
struct slab * slabs_full
Definition slab.h:26
char name[32]
Definition slab.h:20
boolean_t default_virt_addr
Definition slab.h:37
size_t total_slabs
Definition slab.h:30
size_t total_objects
Definition slab.h:31
uintptr_t phys_addr
Definition slab.h:35
size_t free_objects
Definition slab.h:32
size_t alignment
Definition slab.h:23
Definition slab.h:8
void * first_obj
Definition slab.h:11
uintptr_t phys_addr
Definition slab.h:15
size_t total_objects
Definition slab.h:13
size_t free_objects
Definition slab.h:14
void * free_list
Definition slab.h:12
uint32_t magic
Definition slab.h:9
struct slab * next
Definition slab.h:10
unsigned int uint32_t
Definition type.h:19
uint8_t boolean_t
Definition type.h:89
unsigned long uintptr_t
Definition type.h:73