#ifndef PROC_PROC_H_ #define PROC_PROC_H_ #include #include "hal/hal.h" #include "spinlock/spinlock.h" #include "bitmap/bitmap.h" #define PROC_NAME_MAX 0x100 #define PROC_STACKBLOCKS 32 #define PROC_STACKSIZE (PROC_STACKBLOCKS * BITMAP_BLOCK_SIZE) #define PROC_MAX 0x100 // max amount of processes typedef struct { IntrStackFrame trapframe; uint8_t *kstack; PgTable *cr3; } ProcPlatformData; enum { PROC_READY, PROC_RUNNING, PROC_ZOMBIE, PROC_WAITING, }; typedef struct Proc { struct Proc *next; uint64_t pid; char name[PROC_NAME_MAX]; ProcPlatformData platformdata; uint8_t state; VasRange *vas; bool kern; } Proc; typedef struct { SpinLock spinlock; Proc *procs; Proc *current; } Procs; extern Procs PROCS; void proc_init(void); void proc_register(Proc *proc); Proc *proc_spawnkern(void (*ent)(void), char *name); Proc *proc_spawnuser(char *mountpoint, char *path); void proc_sched(void *cpustate); void proc_killself(void); void proc_kill(Proc *proc); #define PROC_DIE() \ do { \ proc_killself(); \ for(;;); \ } while(0) #endif // PROC_PROC_H_