#ifndef _JOVE_HAL_PROCESS_H #define _JOVE_HAL_PROCESS_H 1 #include "hal/obj.h" #include "lib/rbtree.h" #include "api/process.h" enum pcb_state { _PCB_STATE_INVALID = 0, PCB_STATE_DEAD, PCB_STATE_READY, PCB_STATE_RUNNING, PCB_STATE_WAITING, PCB_STATE_BLOCKED_MAIL }; struct pcb_mailbox { jove_obj_t *obj; pid_t pid; }; struct pcb_expected_header { struct rbtree_node tree_node; struct pcb_expected_header *sched_next; pid_t pid; jove_obj_t *rootdir; jove_obj_t *pagedir; enum pcb_state state; intmax_t state_code; struct pcb_mailbox send, recv; }; typedef struct process_control_block pcb_t; jove_owned_obj_t *process_current(void); void pcb_new(pcb_t *pcb); pid_t pcb_getpid(pcb_t *pcb); jove_obj_t *pcb_getrootdir(pcb_t *pcb); jove_obj_t *pcb_getpagedir(pcb_t *pcb); enum pcb_state pcb_getstate(pcb_t *pcb); intmax_t pcb_getstatecode(pcb_t *pcb); extern pcb_t *pcb_tree; #endif