From 51ab94a29f64de42e3dec3a3ef0ec6a94cda28a6 Mon Sep 17 00:00:00 2001 From: Miguel Date: Sat, 1 Sep 2018 12:10:13 +0200 Subject: working on new syscalls --- kernel/scheduler.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 64 insertions(+), 5 deletions(-) (limited to 'kernel/scheduler.c') diff --git a/kernel/scheduler.c b/kernel/scheduler.c index 540e72b..b367825 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -2,7 +2,6 @@ // // - #include "kernel.h" #include "mem.h" #include "asm/x86.h" @@ -20,10 +19,17 @@ static volatile struct task_list_struct volatile bool active; volatile uint32_t esp; // stack pointer of the task; volatile pdirectory *vmem; // number of virtual memory table to switch to - volatile bool waiting; + volatile bool waiting; volatile bool skipwait; volatile uint32_t brk; volatile uint32_t esp0; + + volatile bool syscall; // waiting for syscall to be processed. + volatile uint32_t eax; + volatile uint32_t ebx; + volatile uint32_t ecx; + volatile uint32_t edx; + }volatile task_list[MAX_TASKS]; @@ -59,6 +65,36 @@ volatile int add_task(uint32_t esp, uint32_t vmem) kpanic("out of task slots!"); } +void task_wake_syscall_worker() +{ + task_list[2].waiting=false; // todo: context switch immiditly? +} + +void task_syscall_worker() +{ + klog("checking if any pending syscalls."); + + for(int i=0;i