kernel/sched/process.c (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
#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;
}
}
}