From 38b1273c7e3a52ae929f36fe07e29bc68ef95102 Mon Sep 17 00:00:00 2001 From: Miguel Date: Mon, 3 Sep 2018 00:07:20 +0200 Subject: clean filenames etc --- kernel/scheduler.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'kernel/scheduler.c') diff --git a/kernel/scheduler.c b/kernel/scheduler.c index cfd0fcd..5316438 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -292,3 +292,36 @@ volatile void task_set_brk(uint32_t brk) { task_list[current_task].brk=brk; } + +void userfunc() +{ + + // we need enable here again (since the pushed eflags have it disabled)! + x86_sti(); + + // if we are pid 0, replace ourselves with /bin/init and enter usermode + if(task_get_current_pid()==0) + { + uint32_t alloc; + uint32_t entry_global=load_elf(BIN_INIT,&alloc); + task_set_brk(alloc); + asm_usermode(entry_global); + } + + // kernel worker thread: SLEEPER + if(task_get_current_pid()==1) + { + while(1) + { + __asm__("hlt"); + } + } + + // kernel worker thread: SYSCALL CHECKER + if(task_get_current_pid()==2) + { + task_syscall_worker(); + } +} + + -- cgit v1.2.3