From e32788d8d4acab9f8cb75ca9e354af8f0ea93ffa Mon Sep 17 00:00:00 2001 From: antifallobst Date: Sun, 28 May 2023 23:15:58 +0200 Subject: [PATCH] updated sysabi --- kernel/sysabi.md | 57 +++++++++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/kernel/sysabi.md b/kernel/sysabi.md index af1b84d..81aa169 100644 --- a/kernel/sysabi.md +++ b/kernel/sysabi.md @@ -18,35 +18,38 @@ The following calls should be implemented to some degree in noxos 1.0. # Categories ## Files -| ID | Name | Description | Arg1 | Arg2 | Arg3 | Arg4 | Result | Status | -|--------|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------|--------|------|-------------|--------|-------------| -| 0x0101 | `nx_fopen` | Opens the file at the _len_ bytes long path _path_ and writes a file descriptor to the referenced file into _fd_ (which needs to be a pointer). | path | len | *fd | | status | Implemented | -| 0x0102 | `nx_fclose` | Closes the file which is indicated by descriptor _fd_. This should always be called, otherwise the OS will have to unload files without knowledge of usage. | fd | | | | status | Implemented | -| 0x0103 | `nx_fread` | Reads at most _n_ bytes from a file given as descriptor _fd_ and at a specific position _offset_ into a given memory region _mem_. | fd | offset | mem | n | status | Implemented | -| 0x0104 | `nx_fwrite` | Writes _n_ bytes from a given memory region _mem_ into the file referenced by _fd_ at the given position _offset_, not inserting but either overwriting existing content or appending to the file. | fd | offset | mem | n | status | Implemented | -| 0x0105 | `nx_fdelete` | Completely delete the file or folder at a given path _path_, which is _len_ bytes long. | path | len | | | status | Implemented | -| 0x0106 | `nx_flist` | List all files and/or directories at the _len_ bytes long path _path_ and write their NULL-separated names into _mem_. When _mem_ is NULL, _needed_mem_ (which needs to be a pointer to an 32-bit integer) is filled with the appropriate value. | path | len | mem | *needed_mem | status | Implemented | -| 0x0107 | `nx_finfo` | Writes the information about the files attribute _attr_ into mem. Types of attributes are described below. | fd | attr | mem | | status | N/A | +| ID | Name | Description | Arg1 | Arg2 | Arg3 | Arg4 | Result | Status | +|--------|----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------|--------|------|-------------|--------|-------------| +| 0x0001 | `nx_fs_open` | Opens the file at the _len_ bytes long path _path_ and writes a file descriptor to the referenced file into _fd_ (which needs to be a pointer). | path | len | *fd | | status | Implemented | +| 0x0002 | `nx_fs_close` | Closes the file which is indicated by descriptor _fd_. This should always be called, otherwise the OS will have to unload files without knowledge of usage. | fd | | | | status | Implemented | +| 0x0003 | `nx_fs_read` | Reads at most _n_ bytes from a file given as descriptor _fd_ and at a specific position _offset_ into a given memory region _mem_. | fd | offset | mem | n | status | Implemented | +| 0x0004 | `nx_fs_write` | Writes _n_ bytes from a given memory region _mem_ into the file referenced by _fd_ at the given position _offset_, not inserting but either overwriting existing content or appending to the file. | fd | offset | mem | n | status | Implemented | +| 0x0005 | `nx_fs_delete` | Completely delete the file or folder at a given path _path_, which is _len_ bytes long. | path | len | | | status | Implemented | +| 0x0006 | `nx_fs_list` | List all files and/or directories at the _len_ bytes long path _path_ and write their NULL-separated names into _mem_. When _mem_ is NULL, _needed_mem_ (which needs to be a pointer to an 32-bit integer) is filled with the appropriate value. | path | len | mem | *needed_mem | status | Implemented | +| 0x0007 | `nx_fs_info` | Writes the information about the files attribute _attr_ into mem. Types of attributes are described below. | fd | attr | mem | | status | N/A | **Note:** The _len_ argument of paths isn't used at the moment, rather than using _len_, _path_ needs to be Null-Terminated. ## Memory -| ID | Name | Description | Arg1 | Arg2 | Arg3 | Arg4 | Result | Status | -|--------|-------------|-------------------------------------------------------------------------------------------------------------------------------------------------|------|------|-------|------|--------|-------------| -| 0x0201 | `nx_mmap` | Maps _n_ 4KB pages to address _addr_. You can provide a bitmap of flags with the _flags_ argument. Which flags can be used, is described below. | addr | n | flags | | status | Implemented | -| 0x0202 | `nx_munmap` | Unmaps _n_ 4KB pages at address _addr_. | addr | n | | | status | Implemented | +| ID | Name | Description | Arg1 | Arg2 | Arg3 | Arg4 | Result | Status | +|--------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|------|------|-------|------|--------|-------------| +| 0x0101 | `nx_mem_alloc` | Maps _n_ 4KB pages to address _addr_. You can provide a bitmap of flags with the _flags_ argument. Which flags can be used, is described below. | addr | n | flags | | status | Implemented | +| 0x0102 | `nx_mem_free` | Unmaps _n_ 4KB pages at address _addr_. | addr | n | | | status | Implemented | +| 0x0103 | `nx_mem_label` | Gives a memory region a file descriptor, called a label, which can then be used for example for executing executable data in that memory region in a new process | addr | len | *fd | | status | N/A | +| 0x0104 | `nx_mem_unlabel` | Takes the file descriptor away from a memory region. | fd | | | | status | N/A | ## Processes -| ID | Name | Description | Arg1 | Arg2 | Arg3 | Arg4 | Result | Status | -|-----|------|-------------|------|------|------|------|--------|--------| -| | | | | | | | | | +| ID | Name | Description | Arg1 | Arg2 | Arg3 | Arg4 | Result | Status | +|--------|------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------|------|--------|----------|------|--------|--------| +| 0x0201 | `nx_proc_create` | Creates a new process with the configuration _conf_ (which format is described below) and writes its process id to _pid_. | conf | *pid | | | status | N/A | +| 0x0202 | `nx_proc_signal_send` | Send the signal _signal_ to _pid_. See below for a list of signals. | pid | signal | | | status | N/A | +| 0x0203 | `nx_proc_signal_set_handler` | Sets a handler for the signal _signal_ in the process _pid_. Not all signals can have a handler. Look at the list for more information. | pid | signal | *handler | | status | N/A | +| 0x0204 | `nx_proc_thread_create` | Spawns a new thread for the current process. The starting point is defined by _addr_. The threads' ID is written into _tid_. | addr | *tid | | | status | N/A | +| 0x0205 | `nx_proc_thread_start` | Starts the current processes' thread with thread id _tid_. | tid | | | | status | N/A | +| 0x0206 | `nx_proc_thread_pause` | Pauses the current processes' thread with thread id _tid_. | tid | | | | status | N/A | +| 0x0207 | `nx_proc_thread_kill` | Kills the current processes' thread with thread id _tid_. | tid | | | | status | N/A | -## Runtime / Dynamic Linker -| ID | Name | Description | Arg1 | Arg2 | Arg3 | Arg4 | Result | Status | -|-----|------|-------------|------|------|------|------|--------|--------| -| | | | | | | | | | - -## Compatibility & Safety +## Drivers | ID | Name | Description | Arg1 | Arg2 | Arg3 | Arg4 | Result | Status | |-----|------|-------------|------|------|------|------|--------|--------| | | | | | | | | | | @@ -78,3 +81,13 @@ If another process calls them, they will just return without doing anything. |-----|-----------|-------------------------------------------| | 0 | `write` | Enables write access to the mapped pages. | | 1 | `no_exec` | Prevents execution of the mapped pages. | + +### Process configuration + +### Process signals +- __SIGSTART__: starts the process +- __SIGPAUSE__: pauses the process +- __SIGKILL__: kills the process and destroys the processes data structures +- __SIGEXIT__: send by the kernel before stopping the process - handler implementation possible +- __SIGPFAULT__: sends when the process access memory it is not permitted to. Followed by SIGEXIT - handler implementation possible +- __SIGMATHAULT__: sends when the process does stuff like dividing by zero. Followed by SIGEXIT - handler implementation possible