diff options
Diffstat (limited to 'kernel/main')
-rw-r--r-- | kernel/main/kmain.c | 48 |
1 files changed, 46 insertions, 2 deletions
diff --git a/kernel/main/kmain.c b/kernel/main/kmain.c index 8dcb7e5..4c49b9a 100644 --- a/kernel/main/kmain.c +++ b/kernel/main/kmain.c @@ -86,6 +86,8 @@ void kmain() for (size_t i = 0; i < sizeof(init_funcs) / sizeof(init_funcs[0]); i++) init_funcs[i](); + dbg(DBG_PROC, "Starting init process\n"); + initproc_start(); panic("\nReturned to kmain()\n"); } @@ -156,7 +158,35 @@ static void *initproc_run(long arg1, void *arg2) make_devices(); #endif - NOT_YET_IMPLEMENTED("PROCS: initproc_run"); + // NOT_YET_IMPLEMENTED("PROCS: initproc_run"); + + // print all the threads in the system + // list_iterate(&curproc->p_threads, thread, kthread_t, kt_plink) + // { + // dbg(DBG_THR, "Thread: %s\n", thread->kt_proc->p_name); + // } + + // proctest_main(0, NULL); + + // dbg(DBG_PROC, "%s", "In main thread!\n"); + +#ifdef __DRIVERS__ + // driverstest_main(0, NULL); + char name[32] = {0}; + for (long i = 0; i < __NTERMS__; i++) + { + snprintf(name, sizeof(name), "kshell%ld", i); + proc_t *proc = proc_create("ksh"); + kthread_t *thread = kthread_create(proc, kshell_proc_run, i, NULL); + sched_make_runnable(thread); + } +#endif + + // see if there are any children to wait for + while (do_waitpid(-1, 0, 0) != -ECHILD) + { + // do nothing + } return NULL; } @@ -175,7 +205,21 @@ static void *initproc_run(long arg1, void *arg2) */ void initproc_start() { - NOT_YET_IMPLEMENTED("PROCS: initproc_start"); + // NOT_YET_IMPLEMENTED("PROCS: initproc_start"); + + dbg(DBG_PROC, "Setting up the initial process and preparing it to run\n"); + + proc_t *init_proc = proc_create("init"); + KASSERT(init_proc != NULL); + + kthread_t *init_thread = kthread_create(init_proc, initproc_run, 0, NULL); + KASSERT(init_thread != NULL); + + sched_make_runnable(init_thread); + + context_make_active(&curcore.kc_ctx); // start the scheduler + // context_make_active(&init_thread->kt_ctx); + // TODO: ask about how the core is linked to scheduler } void initproc_finish() |