summaryrefslogtreecommitdiff
path: root/kernel/src/scheduler/process.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/scheduler/process.c')
-rw-r--r--kernel/src/scheduler/process.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/kernel/src/scheduler/process.c b/kernel/src/scheduler/process.c
new file mode 100644
index 0000000..a8de836
--- /dev/null
+++ b/kernel/src/scheduler/process.c
@@ -0,0 +1,38 @@
+#include <types.h>
+#include <registers.h>
+#include <heap.h>
+#include <process.h>
+
+process_t process_list;
+process_t current_process;
+
+void create_process(uint64_t rip, uint64_t param1, uint64_t param2)
+{
+ process_t* process = (process_t*)kalloc(sizeof(process_t));
+ registers_t regs = process->registers;
+ regs.rax = 0;
+ regs.rbx = 0;
+ regs.rcx = 0;
+ regs.rdx = 0;
+ regs.rsi = 0;
+ regs.rdi = 0;
+ regs.rsp = 0;
+ regs.rbp = 0;
+ regs.r8 = 0;
+ regs.r9 = 0;
+ regs.r10 = 0;
+ regs.r11 = 0;
+ regs.r12 = 0;
+ regs.r13 = 0;
+ regs.r14 = 0;
+ regs.r15 = 0;
+ regs.rflags = 0;
+
+ uint64_t stack_size = 4*4096;
+ regs.rsp = (uint64_t)kalloc(4*4096) + stack_size - 8;
+ regs.rip = rip;
+ regs.rdi = param1;
+ regs.rsi = param2;
+ process->status = STATUS_READY;
+ process->time_using_cpu = 0;
+}