slab.hpp 621 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #pragma once
  2. #include <cstddef>
  3. #include <type_traits>
  4. #include <stdint.h>
  5. #include "paging.hpp"
  6. #include "phys.hpp"
  7. namespace kernel::mem {
  8. struct slab_cache;
  9. struct slab_head {
  10. slab_cache* cache;
  11. slab_head* next;
  12. slab_head* prev;
  13. void* free;
  14. unsigned int free_count;
  15. unsigned int obj_size;
  16. };
  17. struct slab_cache {
  18. slab_head* slabs_empty;
  19. slab_head* slabs_partial;
  20. slab_head* slabs_full;
  21. std::size_t obj_size;
  22. };
  23. void init_slab_cache(slab_cache* cache, std::size_t obj_size);
  24. void* slab_alloc(slab_cache* cache);
  25. void slab_free(void* ptr);
  26. } // namespace kernel::mem