Files
my-os-project2/kernel/proc/proc.h

62 lines
1.1 KiB
C

#ifndef PROC_PROC_H_
#define PROC_PROC_H_
#include <stdint.h>
#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 {
uint64_t fsbase;
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);
#define PROC_DIE() \
do { \
proc_killself(); \
for(;;); \
} while(0)
#endif // PROC_PROC_H_