diff options
Diffstat (limited to 'kernel/scheduler.c')
| -rw-r--r-- | kernel/scheduler.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/kernel/scheduler.c b/kernel/scheduler.c index a16dd02..2373e36 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -38,7 +38,7 @@ volatile int task_reset(uint32_t pid, uint32_t entry, uint32_t stack) stk[17]=stack; } -volatile int add_task(uint32_t parent) +volatile int add_task(uint32_t parent,uint32_t vmem) { for(int i=0;i<MAX_TASKS;i++) { @@ -47,7 +47,7 @@ volatile int add_task(uint32_t parent) task_list[i].parent=parent; // TODO: do this without paging please! - task_list[i].vmem=vmem_new_space_dir(task_list[parent].vmem); //TODO: what will happen if we get rescheduled!?!?! + task_list[i].vmem=vmem; task_list[i].esp = kballoc(4)+2*4096; // center // TODO: use own page here and copy it instead of this! @@ -218,8 +218,16 @@ volatile uint32_t task_wait(uint32_t pid) volatile uint32_t task_fork(uint32_t pid) { - int ret=add_task(pid); - klog("[%d] forked -> [%d] (free blocks remaining: %d )", current_task, pid,mem_get_free_blocks_count()); +//TODO: what will happen if we get rescheduled!?!?! + int ret=add_task(pid,vmem_new_space_dir(task_list[pid].vmem,false)); + klog("[%d] forked -> [%d] (free blocks remaining: %d )", pid, ret,mem_get_free_blocks_count()); + return ret; +} +volatile uint32_t task_clone(uint32_t pid) +{ +//TODO: what will happen if we get rescheduled!?!?! + int ret=add_task(pid,vmem_new_space_dir(task_list[pid].vmem,true)); + klog("[%d] cloned -> [%d] (free blocks remaining: %d )", pid, ret,mem_get_free_blocks_count()); return ret; } |
