Process linked list

This commit is contained in:
2026-01-31 14:13:48 +01:00
parent 6e633b44b7
commit c46157fad0
8 changed files with 153 additions and 2 deletions

99
src/sched/process.c Normal file
View File

@@ -0,0 +1,99 @@
#include <stddef.h>
#include "process.h"
#include "mem/heap/kheap.h"
#include "kernel.h"
struct process_t* processes_list;
struct process_t* current_process;
void process_init()
{
processes_list = NULL;
current_process = NULL;
}
// Only for debug
void process_display_list(struct process_t* processes_list)
{
int process_view_id = 0;
struct process_t* tmp = processes_list;
while (tmp != NULL)
{
DEBUG("{%d: } -> ", process_view_id);
tmp = tmp->next;
process_view_id++;
}
DEBUG("NULL");
}
struct process_t* process_create()
{
struct process_t* proc = (struct process_t*)kmalloc(sizeof(struct process_t));
if (!proc) return NULL;
proc->context = NULL;
proc->status = READY;
proc->next = NULL;
return proc;
}
void process_add(struct process_t** processes_list, struct process_t* process)
{
if (!process) return;
process->next = NULL;
if (*processes_list == NULL)
{
// List is empty
*processes_list = process;
return;
}
struct process_t* tmp = *processes_list;
while (tmp->next != NULL)
{
tmp = tmp->next;
}
// We're at last process before NULL
tmp->next = process;
// process->next = NULL;
}
void process_delete(struct process_t** processes_list, struct process_t* process)
{
if (!processes_list || !*processes_list || !process) return;
if (*processes_list == process)
{
// process to delete is at head
*processes_list = process->next;
process->next = NULL;
kfree(process);
return;
}
struct process_t* tmp = *processes_list;
while (tmp->next && tmp->next != process)
{
tmp = tmp->next;
}
if (tmp->next == NULL)
{
// Didn't find the process
return;
}
// We're at process before the one we want to delete
tmp->next = process->next;
process->next = NULL;
kfree(process);
}
struct process_t* process_get_next(struct process_t* process)
{
if (!process) return NULL;
return process->next;
}