summaryrefslogtreecommitdiff
path: root/include/kernel/proc.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/kernel/proc.h')
-rw-r--r--include/kernel/proc.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/include/kernel/proc.h b/include/kernel/proc.h
new file mode 100644
index 0000000..89a3db7
--- /dev/null
+++ b/include/kernel/proc.h
@@ -0,0 +1,55 @@
+#pragma once
+#include "common/types.h"
+
+struct Context
+{
+ uint64 ra;
+ uint64 sp;
+
+ uint64 s0;
+ uint64 s1;
+ uint64 s2;
+ uint64 s3;
+ uint64 s4;
+ uint64 s5;
+ uint64 s6;
+ uint64 s7;
+ uint64 s8;
+ uint64 s9;
+ uint64 s10;
+ uint64 s11;
+};
+
+enum ProcState{
+ UNUSED,
+ USED,
+ SLEEPING,
+ RUNNABLE,
+ RUNNING,
+ ZOMBIE,
+};
+
+struct Proc
+{
+ struct Context context;
+
+ enum ProcState state;
+ int pid;
+
+ void* kstack;
+ char name[16];
+
+ //
+};
+
+inline void intr_on() { asm volatile("csrs sstatus, 0x2"); }
+inline void intr_off() { asm volatile("csrc sstatus, 0x2"); }
+
+namespace ProcManager
+{
+ void init();
+ void scheduler();
+ void yield();
+
+ void create_kernel_thread(void (*func)(), const char *name);
+} \ No newline at end of file