CeDOS - kernel/scheduler.c

kernel/scheduler.c (view raw)

#include "cedos/scheduler.h"
#include "cedos/process.h"
#include "cedos/mm/paging.h"
#include "cedos/drivers/console.h"
#include "cedos/kernel.h"

PROCESS* get_slot(void) {
    static PROCESS free_slots[4];
    static uint32_t index = 0;
    return &(free_slots[index++]);
}

/*!
 * Executes a task.
 */
PROCESS_ID sched_exec(PHYS_ADDR page_dir, VIRT_ADDR eip, VIRT_ADDR esp) {
    PROCESS* p = get_slot();
    
    p->page_dir = page_dir;
    p->eip = eip;
    p->esp = esp;

    // TODO: add file descriptors for stdin, stdout and stderr

    p->state = PSTATE_READY;

    return add_process(p);
}

int sched_init(void) {
    // TODO: create and start idle process
    return 1;
}