summaryrefslogtreecommitdiff
path: root/kernel/src/scheduler/process.c
blob: 92c6ab389e23baa26666fac6a255ed6b57d13dff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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;
}