diff options
| author | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-12-03 17:47:58 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-12-03 17:47:58 +0100 |
| commit | 0882221263aa14669946f57578d3ee014493f58f (patch) | |
| tree | 2ca87631b3683ba8a7df8621bbb5f053ff8f165f /kernel/src/scheduler/process.c | |
| parent | ae5499137e377e08feb523c08b26495e79ed16df (diff) | |
scheduler base
Diffstat (limited to 'kernel/src/scheduler/process.c')
| -rw-r--r-- | kernel/src/scheduler/process.c | 38 |
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; +} |
