XenevaOS
Loading...
Searching...
No Matches
process.h
Go to the documentation of this file.
1
30#ifndef __PROCESS_H__
31#define __PROCESS_H__
32
33#if defined(__GNUC__) || defined(__clang__)
34#ifndef __cplusplus
35#include <stdbool.h>
36#endif
37#endif
38#include <stdint.h>
39#include <Fs/vfs.h>
40#include <Cred/group.h>
41#include <Cred/user.h>
42#include <Cap/capability.h>
43
44#ifdef ARCH_ARM64
45#include <Hal/AA64/sched.h>
46#endif
47
48#ifdef ARCH_X64
49#include <Hal/x86_64_sched.h>
50#include <Sync/mutex.h>
51#endif
52#include <list.h>
53
54#define PROCESS_USER_STACK_SZ 512*1024
55
56#define MAX_THREADS_PER_PROCESS 60
57#define FILE_DESC_PER_PROCESS 60
58
59#define PROCESS_STATE_NOT_READY (1<<0)
60#define PROCESS_STATE_READY (1<<1)
61#define PROCESS_STATE_SUSPENDED (1<<2)
62
63/* when a process exits, it's marked
64 * as died */
65#define PROCESS_STATE_DIED (1<<3)
66
67/* when a process's parents dies, whitout
68 * terminating its childs, childs are
69 * marked as zombies
70 */
71#define PROCESS_STATE_ZOMBIE (1<<4)
72#define PROCESS_STATE_ORPHAN (1<<5)
73
74/* process state busy wait is set when
75 * any locks set its as waiting
76 */
77#define PROCESS_STATE_BUSY_WAIT (1<<6)
78
79/* Exit codes for processes */
80#define PROCESS_EXIT_SUCCESS 0
81#define PROCESS_EXIT_FAILURE 1
82
83/* process types */
84#define PROCESS_TYPE_GENERAL (0<<1)
85#define PROCESS_TYPE_SYSTEM (1<<1)
86#define PROCESS_TYPE_BACKGROUND (1<<2)
87#define PROCESS_TYPE_NON_KILLABLE (1<<3)
88
89#define PROCESS_BREAK_ADDRESS 0x0000003000000000
90#ifdef ARCH_X64
91#define PROCESS_MMAP_ADDRESS 0x00000000C0000000
92#define PROCESS_SHM_ADDRESS 0x0000000080000000
93#elif ARCH_ARM64
94#define PROCESS_MMAP_ADDRESS 0x0000000C00000000
95#define PROCESS_SHM_ADDRESS 0x0000000800000000
96#endif
97
98typedef void(*entry) (void*);
99
107
121
122
123//#pragma pack(push,1)
124typedef struct _au_proc_ {
125 char name[16];
129
130 /* process image related stuff */
143#ifdef ARCH_X64
144 /* threading section */
145 AuThread* main_thread;
146#elif ARCH_ARM64
147 AA64Thread* main_thread;
148#endif // Maybe RISC-V?
149
152
153#ifdef ARCH_X64
155#elif ARCH_ARM64
156 AA64Thread* threads[MAX_THREADS_PER_PROCESS];
157#endif // Maybe RISC-V?
158
159 /* file descriptors */
161 /* capability table -- parallel to fds[]*/
163 /*loader related data*/
166
167 /* memory account */
171 size_t shm_break;
175
178
179 /* data structure */
183
184
185//#pragma pack(pop)
186/*
187* AuAddProcess -- adds process to kernel data structure
188* @param root -- pointer to the root process
189* @param proc -- process to add
190*/
191extern void AuAddProcess(AuProcess* parent, AuProcess *proc);
192
193/*
194* AuRemoveProcess -- removes a process from the process
195* data structure
196* @param parent -- pointer to the parent process
197* @param proc -- process to remove
198*/
199extern void AuRemoveProcess(AuProcess* parent, AuProcess* proc);
200
201
202/*
203* Allocate kernel stack
204* @param cr3 -- root page map level, it should be
205* converted to linear virtual address
206*/
208/*
209* KernelStackFree -- frees up an allocated stack
210* @param proc -- Pointer to process
211* @param ptr -- Starting address of the stack
212* @param cr3 -- page root level mapping
213*/
214extern void KernelStackFree(AuProcess* proc, void* ptr, uint64_t *cr3);
215
216/*
217* AuProcessFindPID -- finds a process by its pid
218* @param pid -- process id to find
219*/
220extern AuProcess* AuProcessFindPID(int pid);
221
222#ifdef ARCH_X64
223/*
224* AuProcessFindThread -- finds a process by its
225* main thread
226* @param thread -- pointer to main thread
227*/
228extern AuProcess *AuProcessFindThread(AuThread* thread);
229
230/*
231* AuProcessFindSubThread -- find a process from its
232* sub threads which contain a pointer to its process
233* slot
234* @param thread -- Pointer to sub thread
235*/
237#elif ARCH_ARM64
238/*
239* AuProcessFindThread -- finds a process by its
240* main thread
241* @param thread -- pointer to main thread
242*/
243extern AuProcess* AuProcessFindThread(AA64Thread* thread);
244
245/*
246* AuProcessFindSubThread -- find a process from its
247* sub threads which contain a pointer to its process
248* slot
249* @param thread -- Pointer to sub thread
250*/
251extern AuProcess* AuProcessFindSubThread(AA64Thread* thread);
252
253#endif
254
255/*
256* CreateUserStack -- creates new user stack
257* @param proc -- Pointer to process
258* @param cr3 -- pointer to the address space where to
259* map
260*/
262
263/*
264* AuStartRootProc -- starts the very first process
265* of aurora system
266*/
267extern void AuStartRootProc();
268
269/*
270* AuGetRootProcess -- returns the root process
271*/
273
274/*
275* AuCreateProcessSlot -- creates a blank process slot
276* @param parent -- pointer to the parent process
277*/
278extern AuProcess* AuCreateProcessSlot(AuProcess* parent, char* name);
279
280/*
281* AuProcessFork -- fork a parent process
282* @param parent -- pointer to parent process
283*/
285
286
287/* AuProcessExit -- marks a process
288* as killable
289* @param proc -- process to exit
290*/
291extern void AuProcessExit(AuProcess* proc, bool schedulable);
292
293/*
294* AuProcessGetFileDesc -- returns a empty file descriptor
295* from process slot
296* @param proc -- pointer to process slot
297*/
298extern int AuProcessGetFileDesc(AuProcess* proc);
299
300/*
301* AuProcessWaitForTermination -- waits for termination
302* of child processes
303* @param proc -- pointer to process who needs to
304* wait for termination
305* @param pid -- pid of the process, if -1 then any child
306* process
307*/
308extern int AuProcessWaitForTermination(AuProcess *proc, int pid);
309
310#ifdef ARCH_X64
311extern AuMutex* AuProcessGetMutex();
312#endif
313
314#ifdef ARCH_ARM64
322/*
323 * @brief CreateSubUserStack -- creates new user stack
324 * @param proc -- Pointer to process slot
325 * @param cr3 -- pointer to the address space where to
326 * map
327 */
329#endif
338extern int AuCreateUserthread(AuProcess* proc, void(*entry) (), char *name);
339
344extern int AuProcGetNumProcessCount();
345
352extern int AuProcessFetch(AuProcessList* list, int num_proc_count);
353
354#endif
XEProcessList * list
Definition main.cpp:29
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
unsigned short int uint16_t
Definition acefiex.h:162
#define GID_NUM
Definition group.h:38
#define AURORA_MAX_GROUPS
Definition group.h:60
uint64_t * CreateSubUserStack(AuProcess *proc, uint64_t *cr3)
Definition process.c:218
AuMutex * AuProcessGetMutex()
Definition process.cpp:581
AuProcess * AuProcessFindThread(AuThread *thread)
Definition process.cpp:152
AuProcess * AuProcessFindSubThread(AuThread *thread)
Definition process.cpp:168
uint64_t CreateKernelStack(AuProcess *proc, uint64_t *cr3)
Definition process.cpp:203
int AuProcGetNumProcessCount()
AuProcGetNumProcessCount – returns the total number of process created.
Definition process.c:533
void(* entry)(void *)
Definition process.h:98
int AuProcessWaitForTermination(AuProcess *proc, int pid)
AuProcessWaitForTermination – waits for termination of child processes.
Definition process.cpp:396
AuProcess * AuGetRootProcess()
Definition process.cpp:369
void AuAddProcess(AuProcess *parent, AuProcess *proc)
Definition process.cpp:64
AuProcess * AuCreateProcessSlot(AuProcess *parent, char *name)
Definition process.cpp:296
struct _sys_proc_list_ AuProcessList
#define FILE_DESC_PER_PROCESS
Definition process.h:57
int AuCreateUserthread(AuProcess *proc, void(*entry)(), char *name)
Creates a user mode thread.
Definition process.cpp:596
void AuRemoveProcess(AuProcess *parent, AuProcess *proc)
Definition process.cpp:86
void AuStartRootProc()
Definition process.cpp:351
#define MAX_THREADS_PER_PROCESS
Definition process.h:56
void KernelStackFree(AuProcess *proc, void *ptr, uint64_t *cr3)
Definition process.cpp:222
int AuProcessGetFileDesc(AuProcess *proc)
Definition process.cpp:433
AuProcess * AuProcessFindPID(int pid)
Definition process.cpp:139
uint64_t * CreateUserStack(AuProcess *proc, uint64_t *cr3)
Definition process.cpp:179
struct _au_proc_cred_ AuProcCredentials
int AuProcessFetch(AuProcessList *list, int num_proc_count)
AuProcessFetch – fetch current process table status.
Definition process.c:588
AuProcess * AuProcessFork(AuProcess *parent)
struct _au_proc_ AuProcess
void AuProcessExit(AuProcess *proc, bool schedulable)
Definition process.cpp:493
uint64_t AuCreateSubKernelStack(AuProcess *proc, uint64_t *pml)
AuCreateSubKernelStack – maps sub kernel stack and return the top of the stack, it only maps 4KiB of ...
Definition sched.c:537
Definition vfs.h:98
Definition capability.h:42
Definition process.h:124
list_t * vmareas
Definition process.h:168
char name[16]
Definition process.h:125
list_t * shmmaps
Definition process.h:169
uint64_t _envp_block_
Definition process.h:137
uint32_t cpu_usage
Definition process.h:140
AuProcCredentials creds
Definition process.h:177
size_t shm_break
Definition process.h:171
uint64_t _image_base_
Definition process.h:133
uint8_t type_flags
Definition process.h:128
AuCapability caps[FILE_DESC_PER_PROCESS]
Definition process.h:162
uint64_t total_runtime_us
Definition process.h:138
size_t _kstack_index_
Definition process.h:136
int proc_id
Definition process.h:126
size_t proc_mmap_len
Definition process.h:174
uint8_t num_thread
Definition process.h:150
uint64_t * cr3
Definition process.h:131
AuVFSNode * fsys
Definition process.h:165
size_t _user_stack_index_
Definition process.h:135
entry entry_point
Definition process.h:151
uint64_t window_runtime_us
Definition process.h:139
uint64_t prev_sample_runtime_us
Definition process.h:141
struct _au_proc_ * next
Definition process.h:180
struct _au_proc_ * prev
Definition process.h:181
size_t proc_mem_heap
Definition process.h:172
uint64_t _main_stack_
Definition process.h:134
list_t * waitlist
Definition process.h:170
AuVFSNode * fds[FILE_DESC_PER_PROCESS]
Definition process.h:160
AuVFSNode * file
Definition process.h:164
uint64_t prev_sample_time_us
Definition process.h:142
uint8_t state
Definition process.h:127
uint64_t _image_size_
Definition process.h:132
size_t proc_heapmem_len
Definition process.h:173
Definition process.h:100
uint16_t num_sgid
Definition process.h:105
UID_NUM uid
Definition process.h:102
uint8_t caps
Definition process.h:101
GID_NUM sgid[AURORA_MAX_GROUPS]
Definition process.h:104
GID_NUM gid
Definition process.h:103
Definition x86_64_sched.h:118
Definition list.h:46
Definition mutex.h:40
Definition process.h:112
uint64_t window_runtime_us
Definition process.h:116
int proc_id
Definition process.h:113
char name[16]
Definition process.h:114
uint32_t num_threads
Definition process.h:117
uint32_t cpu_usage
Definition process.h:119
uint64_t total_runtime_us
Definition process.h:115
uint32_t num_file_opened
Definition process.h:118
#define UID_NUM
Definition user.h:35