Cosmos/Docs/Kernel/MemoryManager.md
2015-05-11 15:28:06 +02:00

1.1 KiB

The Memory Manager

The manager will init it self if there is no blocks, the manager is model after a double LinkedList and not a List.

Memory Layout

The layout has not preset list or table but rather every item has meta data linking the next and previous item this allows for a robust system.

The data layout looks as follow :

Block|Block|Block etc.

Block =

Meta Data|Data

Meta data =
4 bytes (preveus block address start)|4 bytes (next block address start)|4 bytes (curent[this] block size)| 4 bytes (curent[this] block flag)
```
BlockFlags :

```
Allocated = 0,
Free = 1,
```

the final layout looks like this:

```
4 bytes|4 bytes|4 bytes|4 bytes | (size of Block) bytes  |  4 bytes|4 bytes|4 bytes | 4 bytes | (size of Block) bytes  | etc

```
Note:
this means the smallest size an Block can occupy is 17 bytes, 16 bytes for the header and 1 for the smallest data type a byte.

# How this system is used.

### Allocation
  Adding an Block is easy, you simply find the first free block using compare exchange and split it.

## Deallocation (free)
  Freeing a block is easy set its flag(in meta data) to Free