summaryrefslogtreecommitdiffstats
path: root/proc/process.h
diff options
context:
space:
mode:
Diffstat (limited to 'proc/process.h')
-rw-r--r--proc/process.h34
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