5.3 KiB
process.h
Processes are the containers, in which threads are organized.
MAX_THREADS_PER_PROCESS
- macro
The maximum amount of threads a process can have. This limitation is just for the bitmap, the overall processing structure would be capable of processes with unlimited threads, in theory.
THREAD_ID_INVALID
- macro
If process_get_thread_id() returns this, the process can't spawn one more thread.
pid_t
- typedef
A typedef for uint32_t
, used for process identification.
Such an identification number is also called pid
.
processes_standard_E
- enum
These are standard pids
- None - This pid is invalid, like
NULL
is an invalid pointer - Kernel - The kernels' main process
process_blockers_E
- enum
- PIPE_OUT - This blocker becomes activated, when the process tries to write to a pipe, but the pipe has not enough space for the data. It becomes deactivated, when the pipe has space to fit the rest of the data.
- PIPE_IN - This blocker becomes activated, when the process tries to read from a pipe, but the pipe has not the requested amount of data. It becomes deactivated, when the pipe contains data again.
process_T
- struct
Name | Type | Description |
---|---|---|
name | char[128] | The processes' name |
id | pid_t | The process-identification number |
chunk | void* | A pointer to the chunk, where the process is stored in |
chunk_id | uint32_t | The processes id inside of its chunk |
page_map | page_map_T* | The processes page map. |
executable | elf_executable_T* | The processes executable |
fd_array | file_descriptor_array_T* | Contains the open file descriptors of the process. |
stdout | pipe_T* | Pointer to the pipe, where stdout writes to. |
stdin | pipe_T | The pipe, where stdin reads from. |
stderr | pipe_T* | Pointer to the pipe, where stderr writes to. |
waiting | bitmap_T | A bitmap of process blockers. If this is greater 0 the process is blocked by something. |
num_threads | uint32_t | The amount of spawned threads, that belong to the process |
threads | void* | A pointer to the processes' first thread |
thread_ids | bitmap_T(reference needed) | This bitmap keeps track of the local thread ids the process has |
parent | process_T* | The process, that spawned this process |
childs | process_T* | A pointer to the processes' first child process |
prev | process_T* | The previous process |
next | process_T* | The next process |
process_kernel_spawn(executable)
- function (void)
Spawns the kernels' main process.
Warning: this should only be called once, when initializing the scheduler!
process_spawn(parent, name, executable, buffer)
- function (pid_t)
Spawns a process named name as child of parent and returns its pid. The process gets its own page map with the mappings specified in executable. In order to apply these mappings, this function needs the buffer where the executable was loaded from.
process_get_thread_id(process)
- function (int32_t)
Searches for a free thread id in the process. If it finds one it returns it, else it returns THREAD_ID_INVALID.
process_clear_thread_id(process, id)
- function (void)
Frees the thread id and makes it request-able again.
process_pause_pid(pid)
- function (void)
Resolves the pids process and performs process_pause
on it.
process_pause(process)
- function (void)
Pauses process and all of its threads.
process_start_pid(pid)
- function (void)
Resolves the pids process and performs process_start
on it.
process_start(process)
- function (void)
Starts process and all of its threads.
process_kill_pid(pid)
- function (void)
Resolves the pids process and performs process_kill
on it.
process_kill(process)
- function (void)
Kills process and all of its threads and child processes.
This will also destruct the executable
and page_map
associated with process.