55 lines
999 B
C
55 lines
999 B
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);
|
|
|
|
#endif // PROC_PROC_H_
|