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;
}

26
src/sched/process.h Normal file
View File

@@ -0,0 +1,26 @@
#ifndef PROCESS_H
#define PROCESS_H
typedef enum
{
READY,
RUNNING,
DEAD
} status_t;
struct process_t
{
status_t status;
struct cpu_status_t* context;
struct process_t* next;
};
void process_init();
struct process_t* process_create();
void process_add(struct process_t** processes_list, struct process_t* process);
void process_delete(struct process_t** processes_list, struct process_t* process);
struct process_t* process_get_next(struct process_t* process);
void process_display_list(struct process_t* processes_list);
#endif

9
src/sched/scheduler.c Normal file
View File

@@ -0,0 +1,9 @@
#include "kernel.h"
extern struct process_t* processes_list;
extern struct process_t* current_process;
void scheduler_schedule()
{
DEBUG("Scheduler called!");
}

6
src/sched/scheduler.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef SCHEDULER_H
#define SCHEDULER_H
void scheduler_schedule();
#endif