summaryrefslogtreecommitdiff
path: root/kernel/scheduler.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-02 03:53:32 +0200
committerMiguel <m.i@gmx.at>2018-09-02 03:53:32 +0200
commitab6b44f5197e4c6c19f225f909035385d37883b4 (patch)
tree2c07e5bc65cf8e19a6433a7c0c5135eabb56a59c /kernel/scheduler.c
parentc459fab7662eaf45df9994c828065b9fc8d4a8ac (diff)
foolsnake showcasing multithreading and our console
Diffstat (limited to 'kernel/scheduler.c')
-rw-r--r--kernel/scheduler.c16
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;
}