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