diff --git a/sysdata/spec/Memory service spec.md b/sysdata/spec/Memory service spec.md new file mode 100644 index 00000000..0d74e3cf --- /dev/null +++ b/sysdata/spec/Memory service spec.md @@ -0,0 +1,58 @@ +# Memory service spec +The memory service uses the first byte in the message to identify the request type. + +## Allocate (12 bytes) +[0] -> 0 +[1] -> Page count + +[2..10] -> ptr to alloc at + +## Deallocate (12 bytes) + +[0] -> 1 +[1] -> Page count +[2..10] -> ptr to dealloc from + +## Map Device Into Memory +Typically only used for simple drivers such as vga. + +[0] -> 2 +[1] -> Page count +[2..10] -> HostID +[11..19] -> DeviceID + +## Unmap Device From Memory + +[0] -> 3 +[1] -> Page count +[2..10] -> HostID +[11..19] -> DeviceID + +## Set Memory Quota + +[0] -> 4 +[1..9] -> HostID +[10..18] -> ProcessID +[19] -> Refer to the Memory Quota Table +[20..28] -> 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 + +[0] -> 4 +[1..9] -> HostID +[10..18] -> BufferID +[19] -> Refer to the Buffer Quota Table +[20..28] -> 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. + \ No newline at end of file