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
34#include <stdint.h>
35#include <Fs\vfs.h>
36#include <Cred/group.h>
37#include <Cred/user.h>
38
39#ifdef ARCH_ARM64
40#include <Hal/AA64/sched.h>
41#endif
42
43#ifdef ARCH_X64
44#include <Hal\x86_64_sched.h>
45#include <Sync\mutex.h>
46#endif
47#include <list.h>
48
49#define PROCESS_USER_STACK_SZ 512*1024
50
51#define MAX_THREADS_PER_PROCESS 60
52#define FILE_DESC_PER_PROCESS 60
53
54#define PROCESS_STATE_NOT_READY (1<<0)
55#define PROCESS_STATE_READY (1<<1)
56#define PROCESS_STATE_SUSPENDED (1<<2)
57
58/* when a process exits, it's marked
59 * as died */
60#define PROCESS_STATE_DIED (1<<3)
61
62/* when a process's parents dies, whitout
63 * terminating its childs, childs are
64 * marked as zombies
65 */
66#define PROCESS_STATE_ZOMBIE (1<<4)
67#define PROCESS_STATE_ORPHAN (1<<5)
68
69/* process state busy wait is set when
70 * any locks set its as waiting
71 */
72#define PROCESS_STATE_BUSY_WAIT (1<<6)
73
74/* Exit codes for processes */
75#define PROCESS_EXIT_SUCCESS 0
76#define PROCESS_EXIT_FAILURE 1
77
78/* process types */
79#define PROCESS_TYPE_GENERAL (0<<1)
80#define PROCESS_TYPE_SYSTEM (1<<1)
81#define PROCESS_TYPE_BACKGROUND (1<<2)
82#define PROCESS_TYPE_NON_KILLABLE (1<<3)
83
84#define PROCESS_BREAK_ADDRESS 0x0000003000000000
85#ifdef ARCH_X64
86#define PROCESS_MMAP_ADDRESS 0x00000000C0000000
87#define PROCESS_SHM_ADDRESS 0x0000000080000000
88#elif ARCH_ARM64
89#define PROCESS_MMAP_ADDRESS 0x0000000C00000000
90#define PROCESS_SHM_ADDRESS 0x0000000800000000
91#endif
92
93typedef void(*entry) (void*);
94
102
103//#pragma pack(push,1)
104typedef struct _au_proc_ {
105 char name[16];
109
110 /* process image related stuff */
118
119#ifdef ARCH_X64
120 /* threading section */
121 AuThread* main_thread;
122#elif ARCH_ARM64
123 AA64Thread* main_thread;
124#endif // Maybe RISC-V?
125
128
129#ifdef ARCH_X64
131#elif ARCH_ARM64
132 AA64Thread* threads[MAX_THREADS_PER_PROCESS];
133#endif // Maybe RISC-V?
134
135 /* file descriptors */
137 /*loader related data*/
140
141 /* memory account */
145 size_t shm_break;
149
152
153 /* data structure */
157
158
159//#pragma pack(pop)
160/*
161* AuAddProcess -- adds process to kernel data structure
162* @param root -- pointer to the root process
163* @param proc -- process to add
164*/
165extern void AuAddProcess(AuProcess* parent, AuProcess *proc);
166
167/*
168* AuRemoveProcess -- removes a process from the process
169* data structure
170* @param parent -- pointer to the parent process
171* @param proc -- process to remove
172*/
173extern void AuRemoveProcess(AuProcess* parent, AuProcess* proc);
174
175
176/*
177* Allocate kernel stack
178* @param cr3 -- root page map level, it should be
179* converted to linear virtual address
180*/
182/*
183* KernelStackFree -- frees up an allocated stack
184* @param proc -- Pointer to process
185* @param ptr -- Starting address of the stack
186* @param cr3 -- page root level mapping
187*/
188extern void KernelStackFree(AuProcess* proc, void* ptr, uint64_t *cr3);
189
190/*
191* AuProcessFindPID -- finds a process by its pid
192* @param pid -- process id to find
193*/
194extern AuProcess* AuProcessFindPID(int pid);
195
196#ifdef ARCH_X64
197/*
198* AuProcessFindThread -- finds a process by its
199* main thread
200* @param thread -- pointer to main thread
201*/
202extern AuProcess *AuProcessFindThread(AuThread* thread);
203
204/*
205* AuProcessFindSubThread -- find a process from its
206* sub threads which contain a pointer to its process
207* slot
208* @param thread -- Pointer to sub thread
209*/
211#elif ARCH_ARM64
212/*
213* AuProcessFindThread -- finds a process by its
214* main thread
215* @param thread -- pointer to main thread
216*/
217extern AuProcess* AuProcessFindThread(AA64Thread* thread);
218
219/*
220* AuProcessFindSubThread -- find a process from its
221* sub threads which contain a pointer to its process
222* slot
223* @param thread -- Pointer to sub thread
224*/
225extern AuProcess* AuProcessFindSubThread(AA64Thread* thread);
226
227#endif
228
229/*
230* CreateUserStack -- creates new user stack
231* @param proc -- Pointer to process
232* @param cr3 -- pointer to the address space where to
233* map
234*/
236
237/*
238* AuStartRootProc -- starts the very first process
239* of aurora system
240*/
241extern void AuStartRootProc();
242
243/*
244* AuGetRootProcess -- returns the root process
245*/
247
248/*
249* AuCreateProcessSlot -- creates a blank process slot
250* @param parent -- pointer to the parent process
251*/
252extern AuProcess* AuCreateProcessSlot(AuProcess* parent, char* name);
253
254/*
255* AuProcessFork -- fork a parent process
256* @param parent -- pointer to parent process
257*/
259
260
261/* AuProcessExit -- marks a process
262* as killable
263* @param proc -- process to exit
264*/
265extern void AuProcessExit(AuProcess* proc, bool schedulable);
266
267/*
268* AuProcessGetFileDesc -- returns a empty file descriptor
269* from process slot
270* @param proc -- pointer to process slot
271*/
272extern int AuProcessGetFileDesc(AuProcess* proc);
273
274/*
275* AuProcessWaitForTermination -- waits for termination
276* of child processes
277* @param proc -- pointer to process who needs to
278* wait for termination
279* @param pid -- pid of the process, if -1 then any child
280* process
281*/
282extern void AuProcessWaitForTermination(AuProcess *proc, int pid);
283
284#ifdef ARCH_X64
285extern AuMutex* AuProcessGetMutex();
286#endif
287
288#ifdef ARCH_ARM64
296/*
297 * @brief CreateSubUserStack -- creates new user stack
298 * @param proc -- Pointer to process slot
299 * @param cr3 -- pointer to the address space where to
300 * map
301 */
303#endif
312extern int AuCreateUserthread(AuProcess* proc, void(*entry) (), char *name);
313
314#endif
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:207
AuMutex * AuProcessGetMutex()
Definition process.cpp:570
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
void(* entry)(void *)
Definition process.h:93
AuProcess * AuGetRootProcess()
Definition process.cpp:360
void AuAddProcess(AuProcess *parent, AuProcess *proc)
Definition process.cpp:64
AuProcess * AuCreateProcessSlot(AuProcess *parent, char *name)
Definition process.cpp:294
#define FILE_DESC_PER_PROCESS
Definition process.h:52
int AuCreateUserthread(AuProcess *proc, void(*entry)(), char *name)
Creates a user mode thread.
Definition process.cpp:585
void AuRemoveProcess(AuProcess *parent, AuProcess *proc)
Definition process.cpp:86
void AuStartRootProc()
Definition process.cpp:342
#define MAX_THREADS_PER_PROCESS
Definition process.h:51
void KernelStackFree(AuProcess *proc, void *ptr, uint64_t *cr3)
Definition process.cpp:222
int AuProcessGetFileDesc(AuProcess *proc)
Definition process.cpp:424
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
AuProcess * AuProcessFork(AuProcess *parent)
struct _au_proc_ AuProcess
void AuProcessExit(AuProcess *proc, bool schedulable)
AuProcessExit – exits a process.
Definition process.cpp:484
void AuProcessWaitForTermination(AuProcess *proc, int pid)
AuProcessWaitForTermination – waits for termination of child processes.
Definition process.cpp:387
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:516
Definition vfs.h:98
Definition process.h:104
list_t * vmareas
Definition process.h:142
char name[16]
Definition process.h:105
list_t * shmmaps
Definition process.h:143
uint64_t _envp_block_
Definition process.h:117
AuProcCredentials creds
Definition process.h:151
size_t shm_break
Definition process.h:145
uint64_t _image_base_
Definition process.h:113
uint8_t type_flags
Definition process.h:108
size_t _kstack_index_
Definition process.h:116
int proc_id
Definition process.h:106
size_t proc_mmap_len
Definition process.h:148
uint8_t num_thread
Definition process.h:126
uint64_t * cr3
Definition process.h:111
AuVFSNode * fsys
Definition process.h:139
size_t _user_stack_index_
Definition process.h:115
entry entry_point
Definition process.h:127
struct _au_proc_ * next
Definition process.h:154
struct _au_proc_ * prev
Definition process.h:155
size_t proc_mem_heap
Definition process.h:146
uint64_t _main_stack_
Definition process.h:114
list_t * waitlist
Definition process.h:144
AuVFSNode * fds[FILE_DESC_PER_PROCESS]
Definition process.h:136
AuVFSNode * file
Definition process.h:138
uint8_t state
Definition process.h:107
uint64_t _image_size_
Definition process.h:112
size_t proc_heapmem_len
Definition process.h:147
Definition process.h:95
uint16_t num_sgid
Definition process.h:100
UID_NUM uid
Definition process.h:97
uint8_t caps
Definition process.h:96
GID_NUM sgid[AURORA_MAX_GROUPS]
Definition process.h:99
GID_NUM gid
Definition process.h:98
Definition x86_64_sched.h:118
Definition list.h:46
Definition mutex.h:40
#define UID_NUM
Definition user.h:35