CeDOS - kernel/sched/process.c

kernel/sched/process.c (view raw)

#include "cedos/sched/process.h"

#define NULL ((void*)0)

PROCESS* list_head;
//PROCESS* current_process;
//PROCESS_ID next_available = 0;

PROCESS* get_process(PROCESS_ID pid) {
    for (PROCESS *p = list_head; p != NULL; p = p->next) {
        if (p->id == pid) { 
            return p; 
        } else if (p->id > pid) {
            return NULL;
        }
    }

    return NULL;
}

PROCESS_ID add_process(PROCESS* process) {
    for (PROCESS **p = &list_head; *p != NULL; p = &((*p)->next)) {
        if ((*p)->next == NULL) {
            (*p)->next = process;
            process->id = (*p)->id + 1;
            process->next = NULL;
            return process->id;
        } else if ((*p)->next->id > (*p)->id + 1) {
            (*p)->next = process;
            process->id = (*p)->id + 1;
            process->next = (*p);
            return process->id;
        }
    }

    list_head = process;
    process->next = NULL;
    process->id = 0;
    return 0;
}

void remove_process(PROCESS_ID pid) {
    for (PROCESS **p = &list_head; (*p) != NULL; p = &((*p)->next)) {
        if ((*p)->next != NULL && (*p)->next->id == pid) {
            (*p)->next = (*p)->next->next;
            return;
        }
    }
}