Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion design/memory.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ any pages after the region end should be 0).

## Paging Allocator (`memory.h`)

Paging allocator (aka `kmalloc` and `kfree`) is responsible for connecting the
Paging allocator (aka `pmalloc` and `pfree`) is responsible for connecting the
physical memory allocator (ram) and page tables (mmu). This allocator keeps a
linked list of tables, 1022 entries each.

Expand Down
2 changes: 1 addition & 1 deletion src/apps/demo/src/demo.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ int __start(size_t argc, char ** argv) {
int store = 0;
len += printf("The last part is pointers %8p\n", &store);

void * data = kmalloc(10);
void * data = pmalloc(10);

printf("\nMalloc memory got pointer %p\n", data);
printf("Float number %f or shorter %3f or digits %.4f or lead %.04f\n", 3.14, 31.45, 3.14, 3.14);
Expand Down
1 change: 1 addition & 0 deletions src/drivers/src/ata.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "cpu/ports.h"
#include "debug.h"
#include "drivers/rtc.h"
#include "kernel.h"
#include "libc/memory.h"
#include "libc/proc.h"
#include "libc/stdio.h"
Expand Down
1 change: 1 addition & 0 deletions src/drivers/src/disk.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

#include "drivers/ata.h"
#include "drivers/ramdisk.h"
#include "kernel.h"
#include "libc/memory.h"
#include "libc/string.h"

Expand Down
1 change: 1 addition & 0 deletions src/drivers/src/ramdisk.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "drivers/ramdisk.h"

#include "kernel.h"
#include "libc/memory.h"
#include "libc/proc.h"
#include "libc/string.h"
Expand Down
1 change: 1 addition & 0 deletions src/drivers/src/tar.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

#include <stdint.h>

#include "kernel.h"
#include "libc/memory.h"
#include "libc/proc.h"
#include "libc/stdio.h"
Expand Down
1 change: 1 addition & 0 deletions src/io/src/file.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "io/file.h"

#include "kernel.h"
#include "libc/memory.h"
#include "libk/sys_call.h"

Expand Down
4 changes: 4 additions & 0 deletions src/kernel/include/kernel.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ int kernel_call_as_proc(int pid, _proc_call_t fn, void * data);

int kernel_switch_task(int next_pid);

void * kmalloc(size_t size);
void * krealloc(void * ptr, size_t size);
void kfree(void * ptr);

#ifdef TESTING
#define NO_RETURN
#else
Expand Down
12 changes: 12 additions & 0 deletions src/kernel/src/kernel.c
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,18 @@ process_t * kernel_find_pid(int pid) {
return pm_find_pid(&__kernel.pm, pid);
}

void * kmalloc(size_t size) {
return memory_alloc(&__kernel.kernel_memory, size);
}

void * krealloc(void * ptr, size_t size) {
return memory_realloc(&__kernel.kernel_memory, ptr, size);
}

void kfree(void * ptr) {
memory_free(&__kernel.kernel_memory, ptr);
}

static void cursor() {
vga_cursor(3, 3);

Expand Down
10 changes: 5 additions & 5 deletions src/kernel/src/term.c
Original file line number Diff line number Diff line change
Expand Up @@ -340,9 +340,9 @@ static void exec_buff() {

// Free parsed args
for (size_t i = 0; i < argc; i++) {
kfree(argv[i]);
pfree(argv[i]);
}
kfree(argv);
pfree(argv);
}

static bool is_ws(char c) {
Expand Down Expand Up @@ -412,7 +412,7 @@ static char ** parse_args(const char * line, size_t * out_len) {
}

*out_len = len;
char ** args = kmalloc(sizeof(char *) * len);
char ** args = pmalloc(sizeof(char *) * len);
size_t arg_i = 0;

while (*line) {
Expand Down Expand Up @@ -443,7 +443,7 @@ static char ** parse_args(const char * line, size_t * out_len) {

line++;

args[arg_i] = kmalloc(sizeof(char) * next);
args[arg_i] = pmalloc(sizeof(char) * next);
kmemcpy(args[arg_i], line, next - 1);
args[arg_i][next - 1] = 0;
arg_i++;
Expand All @@ -459,7 +459,7 @@ static char ** parse_args(const char * line, size_t * out_len) {
}

size_t word_len = line - start;
args[arg_i] = kmalloc(sizeof(char) * word_len + 1);
args[arg_i] = pmalloc(sizeof(char) * word_len + 1);
kmemcpy(args[arg_i], start, word_len);
args[arg_i][word_len] = 0;
arg_i++;
Expand Down
6 changes: 3 additions & 3 deletions src/libc/include/libc/memory.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
#include "memory_alloc.h"

void init_malloc(memory_t * memory);
void * kmalloc(size_t size);
void * krealloc(void * ptr, size_t size);
void kfree(void * ptr);
void * pmalloc(size_t size);
void * prealloc(void * ptr, size_t size);
void pfree(void * ptr);

#endif // LIBC_MEMORY_H
6 changes: 3 additions & 3 deletions src/libc/src/array.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ int arr_create(arr_t * arr, size_t size, size_t elem_size) {
return -1;
}

arr->data = kmalloc(size * elem_size);
arr->data = pmalloc(size * elem_size);
if (!arr->data) {
return -1;
}
Expand All @@ -25,7 +25,7 @@ int arr_create(arr_t * arr, size_t size, size_t elem_size) {

void arr_free(arr_t * arr) {
if (arr && arr->data) {
kfree(arr->data);
pfree(arr->data);
arr->data = 0;
}
}
Expand Down Expand Up @@ -119,7 +119,7 @@ static void * arr_at_no_limit(const arr_t * arr, size_t i) {

static int grow_array(arr_t * arr) {
size_t new_size = arr->size + (arr->size / 2);
void * new_data = krealloc(arr->data, new_size);
void * new_data = prealloc(arr->data, new_size);
if (!new_data) {
return -1;
}
Expand Down
4 changes: 2 additions & 2 deletions src/libc/src/circular_buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ int cb_create(cb_t * cb, size_t size, size_t elem_size) {
return -1;
}

cb->buff = kmalloc(size * elem_size);
cb->buff = pmalloc(size * elem_size);
if (!cb->buff) {
return -1;
}
Expand All @@ -26,7 +26,7 @@ int cb_create(cb_t * cb, size_t size, size_t elem_size) {

void cb_free(cb_t * cb) {
if (cb && cb->buff) {
kfree(cb->buff);
pfree(cb->buff);
cb->buff = 0;
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/libc/src/memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ void init_malloc(memory_t * memory) {
__memory = memory;
}

void * kmalloc(size_t size) {
void * pmalloc(size_t size) {
return memory_alloc(__memory, size);
}

void * krealloc(void * ptr, size_t size) {
void * prealloc(void * ptr, size_t size) {
return memory_realloc(__memory, ptr, size);
}

void kfree(void * ptr) {
void pfree(void * ptr) {
memory_free(__memory, ptr);
}
2 changes: 1 addition & 1 deletion src/libc/src/signal.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ int register_signal(int sig_no, signal_handler callback) {
sig = sig->next;
}

sig = kmalloc(sizeof(signal_t));
sig = pmalloc(sizeof(signal_t));
if (!sig) {
return -1;
}
Expand Down
40 changes: 20 additions & 20 deletions tests/src/libc/test_array.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ class Array : public testing::Test {
arr_create(&arr, 3, 1);
arr_size(&arr);

RESET_FAKE(kmalloc);
kmalloc_fake.custom_fake = malloc;
RESET_FAKE(pmalloc);
pmalloc_fake.custom_fake = malloc;
}

void TearDown() override {
Expand All @@ -42,15 +42,15 @@ TEST_F(Array, arr_create) {
EXPECT_NE(0, arr_create(0, 0, 1));
EXPECT_NE(0, arr_create(&arr, 1, 0));
EXPECT_NE(0, arr_create(&arr, 0, 1));
EXPECT_EQ(0, kmalloc_fake.call_count);
EXPECT_EQ(0, kfree_fake.call_count);
EXPECT_EQ(0, pmalloc_fake.call_count);
EXPECT_EQ(0, pfree_fake.call_count);

// Good args
EXPECT_EQ(0, arr_create(&arr, 4, 1));
EXPECT_EQ(0, arr_size(&arr));

ASSERT_EQ(1, kmalloc_fake.call_count);
EXPECT_EQ(4, kmalloc_fake.arg0_val);
ASSERT_EQ(1, pmalloc_fake.call_count);
EXPECT_EQ(4, pmalloc_fake.arg0_val);

arr_free(&arr);

Expand All @@ -60,31 +60,31 @@ TEST_F(Array, arr_create) {
EXPECT_EQ(0, arr_create(&arr, 4, 2));
EXPECT_EQ(0, arr_size(&arr));

ASSERT_EQ(1, kmalloc_fake.call_count);
EXPECT_EQ(8, kmalloc_fake.arg0_val);
ASSERT_EQ(1, pmalloc_fake.call_count);
EXPECT_EQ(8, pmalloc_fake.arg0_val);

arr_free(&arr);

SetUp();

kmalloc_fake.custom_fake = 0;
kmalloc_fake.return_val = 0;
pmalloc_fake.custom_fake = 0;
pmalloc_fake.return_val = 0;

// First malloc fails
EXPECT_NE(0, arr_create(&arr, 4, 1));
EXPECT_EQ(1, kmalloc_fake.call_count);
EXPECT_EQ(4, kmalloc_fake.arg0_val);
EXPECT_EQ(1, pmalloc_fake.call_count);
EXPECT_EQ(4, pmalloc_fake.arg0_val);
}

TEST_F(Array, arr_free) {
// Invalid parameters
arr_free(0);
EXPECT_EQ(0, kfree_fake.call_count);
EXPECT_EQ(0, pfree_fake.call_count);

void * data = arr.data;
arr_free(&arr);
EXPECT_EQ(1, kfree_fake.call_count);
EXPECT_EQ(data, kfree_fake.arg0_val);
EXPECT_EQ(1, pfree_fake.call_count);
EXPECT_EQ(data, pfree_fake.arg0_val);
EXPECT_EQ(0, arr.data);
}

Expand Down Expand Up @@ -114,9 +114,9 @@ TEST_F(Array, arr_size) {
EXPECT_EQ(0, arr_insert(&arr, 3, &c));
EXPECT_EQ(4, arr_size(&arr));

ASSERT_EQ(1, krealloc_fake.call_count);
EXPECT_EQ(old_data, krealloc_fake.arg0_val);
EXPECT_EQ(4, krealloc_fake.arg1_val);
ASSERT_EQ(1, prealloc_fake.call_count);
EXPECT_EQ(old_data, prealloc_fake.arg0_val);
EXPECT_EQ(4, prealloc_fake.arg1_val);
}

TEST_F(Array, arr_data) {
Expand Down Expand Up @@ -263,8 +263,8 @@ TEST_F(Array, arr_insert) {
TEST_F(Array, array_insert_grow_fails) {
fill_array();

krealloc_fake.custom_fake = 0;
krealloc_fake.return_val = 0;
prealloc_fake.custom_fake = 0;
prealloc_fake.return_val = 0;

char c = '1';
EXPECT_NE(0, arr_insert(&arr, 0, &c));
Expand Down
30 changes: 15 additions & 15 deletions tests/src/libc/test_circular_buffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ class CircularBuffer : public testing::Test {

cb_create(&cbuff, 3, 1);

RESET_FAKE(kmalloc);
kmalloc_fake.custom_fake = malloc;
RESET_FAKE(pmalloc);
pmalloc_fake.custom_fake = malloc;
}

void TearDown() override {
Expand All @@ -34,16 +34,16 @@ TEST_F(CircularBuffer, cb_create) {
EXPECT_NE(0, cb_create(0, 0, 1));
EXPECT_NE(0, cb_create(&cbuff, 1, 0));
EXPECT_NE(0, cb_create(&cbuff, 0, 1));
EXPECT_EQ(0, kmalloc_fake.call_count);
EXPECT_EQ(0, kfree_fake.call_count);
EXPECT_EQ(0, pmalloc_fake.call_count);
EXPECT_EQ(0, pfree_fake.call_count);

// Good args
EXPECT_EQ(0, cb_create(&cbuff, 4, 1));
EXPECT_EQ(0, cb_len(&cbuff));
EXPECT_EQ(4, cb_buff_size(&cbuff));

ASSERT_EQ(1, kmalloc_fake.call_count);
EXPECT_EQ(4, kmalloc_fake.arg0_val);
ASSERT_EQ(1, pmalloc_fake.call_count);
EXPECT_EQ(4, pmalloc_fake.arg0_val);

cb_free(&cbuff);

Expand All @@ -54,30 +54,30 @@ TEST_F(CircularBuffer, cb_create) {
EXPECT_EQ(0, cb_len(&cbuff));
EXPECT_EQ(4, cb_buff_size(&cbuff));

ASSERT_EQ(1, kmalloc_fake.call_count);
EXPECT_EQ(8, kmalloc_fake.arg0_val);
ASSERT_EQ(1, pmalloc_fake.call_count);
EXPECT_EQ(8, pmalloc_fake.arg0_val);

cb_free(&cbuff);

SetUp();

kmalloc_fake.custom_fake = 0;
kmalloc_fake.return_val = 0;
pmalloc_fake.custom_fake = 0;
pmalloc_fake.return_val = 0;

// First malloc fails
EXPECT_NE(0, cb_create(&cbuff, 4, 1));
EXPECT_EQ(1, kmalloc_fake.call_count);
EXPECT_EQ(4, kmalloc_fake.arg0_val);
EXPECT_EQ(1, pmalloc_fake.call_count);
EXPECT_EQ(4, pmalloc_fake.arg0_val);
}

TEST_F(CircularBuffer, cb_free) {
cb_free(0);
EXPECT_EQ(0, kfree_fake.call_count);
EXPECT_EQ(0, pfree_fake.call_count);

void * data = cbuff.buff;
cb_free(&cbuff);
EXPECT_EQ(1, kfree_fake.call_count);
EXPECT_EQ(data, kfree_fake.arg0_val);
EXPECT_EQ(1, pfree_fake.call_count);
EXPECT_EQ(data, pfree_fake.arg0_val);
EXPECT_EQ(0, cbuff.buff);
}

Expand Down
Loading