Tue, 25 Apr 2023 22:14:51 +0200
2 files changed,
15 insertions(+),
6 deletions(-)
M
src/kernel/mm/memory.c
→
src/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.c
→
src/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;