summaryrefslogtreecommitdiff
path: root/kernel/scheduler.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-03 00:07:20 +0200
committerMiguel <m.i@gmx.at>2018-09-03 00:07:20 +0200
commit38b1273c7e3a52ae929f36fe07e29bc68ef95102 (patch)
tree16734c1c190825159f6ca9696d9c5cfb04e89c8f /kernel/scheduler.c
parentfd5a9b87e47bc072aa63fcaf5735232a37338303 (diff)
clean filenames etc
Diffstat (limited to 'kernel/scheduler.c')
-rw-r--r--kernel/scheduler.c33
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();
+ }
+}
+
+