summaryrefslogtreecommitdiff
path: root/kernel/scheduler.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/scheduler.c')
-rw-r--r--kernel/scheduler.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/kernel/scheduler.c b/kernel/scheduler.c
index 72165f9..20c6f35 100644
--- a/kernel/scheduler.c
+++ b/kernel/scheduler.c
@@ -1,8 +1,12 @@
#include "scheduler.h"
#include "kernel.h"
+#include "gdt.h"
#include "mem.h"
+#include "fs/elf.h"
#include "asm_x86.h"
+#include "asm_task.h"
+#include "asm_usermode.h"
#include "kmalloc.h"
#include "vmem.h"
@@ -32,13 +36,14 @@ static volatile struct task_list_struct
volatile uint32_t ecx;
volatile uint32_t edx;
-}volatile task_list[MAX_TASKS];
+}task_list[MAX_TASKS];
volatile int task_reset(uint32_t pid, uint32_t entry, uint32_t stack)
{
uint32_t *stk=task_list[pid].esp;
stk[14]=entry;
stk[17]=stack;
+ return 1;
}
volatile int add_task(uint32_t parent,uint32_t vmem)
@@ -199,6 +204,7 @@ volatile uint32_t task_syscall(uint32_t eax,uint32_t ebx, uint32_t ecx, uint32_t
task_list[current_task].edx=edx;
task_list[2].wait=false;
+ return 1;
}
//TODO: free vmem too!
@@ -211,6 +217,7 @@ volatile uint32_t task_exit(uint32_t pid)
task_list[parent_pid].wait=false;
klog("[%d] exit", pid);
vmem_free_dir(task_list[pid].vmem);
+ return 1;
}
volatile uint32_t task_wait(uint32_t pid)
@@ -218,6 +225,7 @@ volatile uint32_t task_wait(uint32_t pid)
klog("[%d] wait", pid);
task_list[pid].wait=true;
task_list[pid].eax=SYSCALL_WAIT;
+ return 1;
}
volatile uint32_t task_fork(uint32_t pid)