summaryrefslogtreecommitdiff
path: root/docs/allocator.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/allocator.md')
-rw-r--r--docs/allocator.md65
1 files changed, 65 insertions, 0 deletions
diff --git a/docs/allocator.md b/docs/allocator.md
new file mode 100644
index 0000000..5885d76
--- /dev/null
+++ b/docs/allocator.md
@@ -0,0 +1,65 @@
+# Allocator
+
+---
+
+KPL uses `mmap` to allocate slabs of non-executable and executable memory
+
+Once memory is used it is not returned to the OS until KPL exits
+
+## Non-Executable
+
+### Mapping
+
+Two linked list of pages is kept, tracing the size of map and how much is used:
+
+#### Small Page Allocator
+
+For allocations less then a page size `< 2 ^ 12`
+
+#### Large Page Allocator
+
+For allocations a page size or larger `>= 2 ^ 12`
+
+### Object Sizes
+
+Every Object KPL allocates is sized to the next power of 2
+
+Because each power of two requires its own ring buffer, minimum allocation size is `2 ^ 6` and max is `2 ^ 27`
+
+### Ring Buffer Sizes
+
+The total number of objects each ring buffer can store can by modified by MACRO'S at compile time
+
+The program will exit if more objects are allocated then it's corresponding ring buffer can hold
+
+### Ring Buffer Implementation
+
+Each ring buffer is implemented as an atomic multi-producer multi-consumer queue
+
+### Operation
+
+#### Constructor
+
+#### Requesting Objects
+
+#### Returning Objects
+
+#### Destructor
+
+## Executable
+
+### Mapping
+
+A linked list of pages is kept, tracing the size of each map and how much is used
+
+### Operation
+
+#### Constructor
+
+#### Requesting Memory
+
+#### Writing To Memory
+
+#### Making Memory Executable
+
+#### Destructor