forked from CosmosOS/Cosmos
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Kudzu
authored and
Kudzu
committed
Jun 9, 2016
1 parent
901ac5b
commit a1577cc
Showing
2 changed files
with
61 additions
and
43 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,61 @@ | ||
On initialization of the kernel, a GlobalInformationTable is setup. This contains the address of the first DataLookupEntry | ||
# Layout | ||
|
||
F..F | ||
Stack | ||
Currently only one stack as we don't have threads yet. Stack resides at top of RAM and grows down. | ||
.... | ||
Data | ||
|
||
Text | ||
Syslinux Boot Code | ||
Cosmos Boot Code | ||
Kernel | ||
Apps (Monolithic currently) | ||
0..0 | ||
|
||
# OLD BELOW THIS POINT | ||
|
||
On initialization of the kernel, a GlobalInformationTable is setup. This contains the address of the first DataLookupEntry | ||
|
||
# The Memory Manager | ||
|
||
The manager will init itself if there are no blocks. The manager is modeled after a double LinkedList and is not a List. | ||
|
||
# Memory Layout | ||
The layout does not have a 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 is as follows: | ||
|
||
```` | ||
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. | ||
# Usage | ||
### Allocation | ||
Allocating a block happens by finding the first free block and split it (if necessary). | ||
## Deallocation | ||
Freeing a block is easy set its flag (in the metadata) to free. |
This file was deleted.
Oops, something went wrong.