diff options
| author | Miguel <m.i@gmx.at> | 2018-09-03 00:07:20 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-09-03 00:07:20 +0200 |
| commit | 38b1273c7e3a52ae929f36fe07e29bc68ef95102 (patch) | |
| tree | 16734c1c190825159f6ca9696d9c5cfb04e89c8f /kernel/scheduler.c | |
| parent | fd5a9b87e47bc072aa63fcaf5735232a37338303 (diff) | |
clean filenames etc
Diffstat (limited to 'kernel/scheduler.c')
| -rw-r--r-- | kernel/scheduler.c | 33 |
1 files changed, 33 insertions, 0 deletions
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(); + } +} + + |
