diff options
Diffstat (limited to 'proc/process.h')
| -rw-r--r-- | proc/process.h | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/proc/process.h b/proc/process.h index ed40a4f..950f63e 100644 --- a/proc/process.h +++ b/proc/process.h @@ -5,49 +5,51 @@ #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 pcb_header { struct rbtree_node tree_node; - struct pcb_expected_header *sched_next; + struct pcb_header *sched_next; + size_t size; pid_t pid; jove_obj_t *rootdir; - jove_obj_t *pagedir; 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); -void pcb_new(pcb_t *pcb); +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_obj_t *pcb_getpagedir(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); -extern pcb_t *pcb_tree; +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 |
