Initial commit, with incomplete header file
This commit is contained in:
parent
938f15d0ee
commit
9bc1cf03aa
29 changed files with 50 additions and 0 deletions
BIN
.cache/clangd/index/acpi.h.502E8D2CBAF01311.idx
Normal file
BIN
.cache/clangd/index/acpi.h.502E8D2CBAF01311.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/address.c.5D03C50FF04550CA.idx
Normal file
BIN
.cache/clangd/index/address.c.5D03C50FF04550CA.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/address.h.009510CA19E3EC62.idx
Normal file
BIN
.cache/clangd/index/address.h.009510CA19E3EC62.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/apic.c.1E14A485EF427059.idx
Normal file
BIN
.cache/clangd/index/apic.c.1E14A485EF427059.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/apic.h.7DAF1AB6A7A06387.idx
Normal file
BIN
.cache/clangd/index/apic.h.7DAF1AB6A7A06387.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/asm.c.EE8C2A3590F259CA.idx
Normal file
BIN
.cache/clangd/index/asm.c.EE8C2A3590F259CA.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/asm.h.0E8851E91BBA08DC.idx
Normal file
BIN
.cache/clangd/index/asm.h.0E8851E91BBA08DC.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/bootboot.h.C90D0D62EB82D0C5.idx
Normal file
BIN
.cache/clangd/index/bootboot.h.C90D0D62EB82D0C5.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/cmos.h.F4FF330371E4747A.idx
Normal file
BIN
.cache/clangd/index/cmos.h.F4FF330371E4747A.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/console.h.965079AD1EB4019F.idx
Normal file
BIN
.cache/clangd/index/console.h.965079AD1EB4019F.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/cpu.h.15328C32696F2246.idx
Normal file
BIN
.cache/clangd/index/cpu.h.15328C32696F2246.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/framebuffer.h.27AC6FCD96B0B3B6.idx
Normal file
BIN
.cache/clangd/index/framebuffer.h.27AC6FCD96B0B3B6.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/interrupt.h.60C9B06C4E27A918.idx
Normal file
BIN
.cache/clangd/index/interrupt.h.60C9B06C4E27A918.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/kernel.c.CDF0C68A7E49621E.idx
Normal file
BIN
.cache/clangd/index/kernel.c.CDF0C68A7E49621E.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/loadcs.S.E36E551B4C8731BA.idx
Normal file
BIN
.cache/clangd/index/loadcs.S.E36E551B4C8731BA.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/paging.h.96115B33C5BBCBD0.idx
Normal file
BIN
.cache/clangd/index/paging.h.96115B33C5BBCBD0.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/pci.c.DD5875FA8B3C85CC.idx
Normal file
BIN
.cache/clangd/index/pci.c.DD5875FA8B3C85CC.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/pci.h.35E7B7249FD052E6.idx
Normal file
BIN
.cache/clangd/index/pci.h.35E7B7249FD052E6.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/ps2_driver.h.ABE83B650421B544.idx
Normal file
BIN
.cache/clangd/index/ps2_driver.h.ABE83B650421B544.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/ram.c.D35B7C6CCE5476FB.idx
Normal file
BIN
.cache/clangd/index/ram.c.D35B7C6CCE5476FB.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/ram.h.D7B6E167BC6FBE52.idx
Normal file
BIN
.cache/clangd/index/ram.h.D7B6E167BC6FBE52.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/serial.h.71601BF2DF22F439.idx
Normal file
BIN
.cache/clangd/index/serial.h.71601BF2DF22F439.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/std.c.A7686DEC53236625.idx
Normal file
BIN
.cache/clangd/index/std.c.A7686DEC53236625.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/std.h.0112DD65E6C7741E.idx
Normal file
BIN
.cache/clangd/index/std.h.0112DD65E6C7741E.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/tar.c.42B40FD4C1A58255.idx
Normal file
BIN
.cache/clangd/index/tar.c.42B40FD4C1A58255.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/tar.h.67C6F37956B00A4B.idx
Normal file
BIN
.cache/clangd/index/tar.h.67C6F37956B00A4B.idx
Normal file
Binary file not shown.
BIN
.cache/clangd/index/uart.c.B1442716BF3731AE.idx
Normal file
BIN
.cache/clangd/index/uart.c.B1442716BF3731AE.idx
Normal file
Binary file not shown.
50
include/slab.h
Normal file
50
include/slab.h
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
#ifndef KARLOS_SLAB_H
|
||||||
|
#define KARLOS_SLAB_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <paging.h>
|
||||||
|
|
||||||
|
/* Forward declaration of per-page descriptor */
|
||||||
|
typedef struct slab_page slab_page_t;
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
/* Per-cache descriptor: one cache per object size */
|
||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
typedef struct slab_cache {
|
||||||
|
size_t obj_size; // bytes per object
|
||||||
|
size_t slots_per_slab; // = PAGE_SIZE / obj_size
|
||||||
|
slab_page_t *empty_slabs; // slabs with all slots free
|
||||||
|
slab_page_t *partial_slabs; // slabs with some free slots
|
||||||
|
slab_page_t *full_slabs; // slabs with no free slots
|
||||||
|
void (*constructor)(void *obj, size_t size);
|
||||||
|
void (*destructor)(void *obj, size_t size);
|
||||||
|
} slab_cache_t;
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
/* Per-slab descriptor: one page carved into fixed-size slots */
|
||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
typedef struct slab_page {
|
||||||
|
void **free_stack; // stack of free slots in this page
|
||||||
|
size_t free_index; // current head of stack (also free_count)
|
||||||
|
size_t free_count; // how many slots are free right now
|
||||||
|
void *page_base; // base address of the slab's page
|
||||||
|
struct slab_page *next; // link to next slab_page in cache list
|
||||||
|
} slab_page_t;
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
/* API: implemented in KARLOS_SLAB.c */
|
||||||
|
/*------------------------------------------------------------------------*/
|
||||||
|
slab_cache_t *slab_cache_create(
|
||||||
|
size_t obj_size,
|
||||||
|
size_t align,
|
||||||
|
void (*constructor)(void*, size_t),
|
||||||
|
void (*destructor)(void*, size_t)
|
||||||
|
);
|
||||||
|
|
||||||
|
void *slab_alloc(slab_cache_t *cache);
|
||||||
|
void slab_free(slab_cache_t *cache, void *obj);
|
||||||
|
void slab_destroy(slab_cache_t *cache);
|
||||||
|
|
||||||
|
#endif /* KARLOS_SLAB_H */
|
||||||
|
|
||||||
0
src/slab.c
Normal file
0
src/slab.c
Normal file
Loading…
Add table
Reference in a new issue