#ifndef _JOVE_HAL_PROCESS_H #define _JOVE_HAL_PROCESS_H 1 #include "hal/obj.h" #include "lib/rbtree.h" #include "api/process.h" struct pcb_mailbox { jove_obj_t *obj; pid_t pid; }; struct pcb_header { struct rbtree_node tree_node; struct pcb_header *sched_next; size_t size; pid_t pid; jove_obj_t *rootdir; enum pcb_state state; intmax_t state_code; struct pcb_mailbox send, recv; void *ksp; }; typedef struct process_control_block pcb_t; jove_owned_obj_t *process_current(void); int pcb_new(jove_owned_obj_t *pcb_obj, size_t size, jove_owned_obj_t *rootdir_obj); int _pcb_new_arch(pcb_t *pcb); pcb_t *pcb_frompid(pid_t pid); pid_t pcb_getpid(pcb_t *pcb); jove_obj_t *pcb_getrootdir(pcb_t *pcb); jove_owned_obj_t *pcb_getpagedir(jove_owned_obj_t *rootdir_obj); jove_owned_obj_t *pcb_getself(jove_owned_obj_t *rootdir_obj); enum pcb_state pcb_getstate(pcb_t *pcb); intmax_t pcb_getstatecode(pcb_t *pcb); void *pcb_getksp(pcb_t *pcb); void **pcb_getksp_ref(pcb_t *pcb); pcb_t *pcb_frompid(pid_t pid); extern struct rbtree_node *pcb_tree; #endif