diff options
Diffstat (limited to 'kernel/task.c')
| -rw-r--r-- | kernel/task.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/kernel/task.c b/kernel/task.c index 1780b77..6ea9b79 100644 --- a/kernel/task.c +++ b/kernel/task.c @@ -76,10 +76,31 @@ uint32_t task_switch_next(uint32_t oldesp) } +//TODO: free vmem too! +uint32_t task_exit(uint32_t oldesp) +{ + task_list[current_task].active=false; + + for(int i=0;i<MAX_TASKS;i++) + { + int pid=(current_task+1+i)%MAX_TASKS; // schedule round robin style + + if(task_list[pid].active) + { + // log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"switch from %d to pid: %d (0x%08X) vmem: %d ", current_task,pid,task_list[pid].esp,task_list[pid].vmem); + current_task=pid; + + vmem_set_dir(task_list[pid].vmem); + return task_list[pid].esp; + } + + } +} uint32_t task_fork(uint32_t oldesp) { - return add_task(oldesp,vmem_new_space_dir()); + int pid=add_task(oldesp,vmem_new_space_dir(task_list[current_task].vmem)); + return pid; } // init task (root of all other tasks / processes) // |
