CeDOS - Commit 32df060b

Malloc added to process structs
Celina Sophie Kalus
Tue, 25 Apr 2023 22:14:51 +0200
2 files changed, 15 insertions(+), 6 deletions(-)
M src/kernel/mm/memory.csrc/kernel/mm/memory.c

@@ -1,5 +1,7 @@

#include "cedos/mm/memory.h" +#include "assert.h" + struct memblock { struct memblock *next; int size;

@@ -31,19 +33,26 @@ void* os_kernel_malloc(size_t size) {

uint32_t addr = (uint32_t)(malloc_next_free); // TODO: test if memory block is large enough + assert(malloc_next_free->size == 0); + addr += sizeof(struct memblock); addr += size; + // TODO: in some cases, one might rather link to the + // next block after that instead of creating a new block + struct memblock *new_block = (struct memblock*)(addr); + new_block->next = malloc_next_free->next; - - // TODO: maybe not big enough? new_block->size = 0; malloc_next_free->next = new_block; malloc_next_free->size = size; - return (void*)(&malloc_next_free[1]); + void *pointer = (void*)(&malloc_next_free[1]); + malloc_next_free = new_block; + + return pointer; } /*!
M src/kernel/sched/sched.csrc/kernel/sched/sched.c

@@ -3,6 +3,7 @@ #include "cedos/sched/process.h"

#include "cedos/sched/sched_strats.h" #include "cedos/mm/paging.h" +#include "cedos/mm/memory.h" #include "cedos/drivers/console.h" #include "cedos/drivers/speaker.h"

@@ -29,9 +30,8 @@ #define PRINT_DBG(...) {}

#endif PROCESS* get_slot(void) { - static PROCESS free_slots[8]; - static uint32_t index = 0; - return &(free_slots[index++]); + PROCESS *new_process = (PROCESS*)os_kernel_malloc(sizeof(PROCESS)); + return new_process; } PROCESS_ID current_pid;