akern-gkgoat-fork/sysdata/spec/Memory Service spec.md
2024-07-06 09:24:23 -05:00

1.6 KiB

Memory service spec

The memory service uses the first byte in the message to identify the request type.

Allocate (12 bytes)

[U8] -> 0 [U8] -> Page count

[U64] -> ptr to alloc at

Deallocate (12 bytes)

[U8] -> 1 [U8] -> Page count [U64] -> ptr to dealloc from

Map Device Into Memory

Typically only used for simple drivers such as vga.

[U8] -> 2 [U8] -> Page count [U64] -> HostID [U64] -> DeviceID

Unmap Device From Memory

[U8] -> 3 [U8] -> Page count [U64] -> HostID [U64] -> DeviceID

Set Memory Quota

[U8] -> 4 [U64] -> HostID [U64] -> ProcessID [U8] -> Refer to the Memory Quota Table [U64] -> Memory quota. In pages of memory. Multiply by 4096 to get the total byte count.

Memory Quota Table

0 -> No quota. 1 -> Soft quota. Notifies the process supervisor. 2 -> Hard quota. Refuses to allocate above the quota. 3 -> Kill quota. Kill the process and notify the supervisor when the process tries to allocate above the quota.

Set Buffer Quota

[U8] -> 4 [U64] -> HostID [U64] -> BufferID [U8] -> Refer to the Buffer Quota Table [U64] -> Buffer quota. In pages of memory. Multiply by 4096 to get the total byte count.

Buffer Quota Table

0 -> No quota 1 -> Soft quota. Notify supervisor of quota violation Buffer Message 2 -> Hard quota. Return an error message to the process that sent the message.