#ifndef __PROC__
#define __PROC__
#include <types.h>
#include <filedesc.h>
#include <synch.h>
#define MAX_PROCESSES 32
#define PROC_RESERVED_SPOT 0xcafebabe
#define PROC_MAX_HEAP_PAGES 2048
struct proc {
pid_t p_pid;
struct filedesc *p_fd;
struct proc *p_proc;
bool p_is_dead;
int p_retval;
struct lock *p_lk;
struct semaphore *p_sem;
uint64_t p_nsyscalls;
int p_nice;
};
extern struct proc *allproc[MAX_PROCESSES];
extern struct lock *lk_allproc;
extern struct lock *lk_exec;
int proc_create( struct proc ** );
int proc_clone(struct proc *, struct proc ** );
void proc_destroy(struct proc *);
int proc_get( pid_t, struct proc ** );
void proc_system_init(void);
void proc_test_pid_allocation(void);
#define PROC_LOCK(x) (lock_acquire( (x)->p_lk ))
#define PROC_UNLOCK(x) (lock_release( (x)->p_lk ))
#endif