Files
mop3/init/init.c
kamkow1 b388b30b24
All checks were successful
Build documentation / build-and-deploy (push) Successful in 44s
Redesign userspace memory management
2026-01-27 17:04:08 +01:00

137 lines
2.1 KiB
C

#include <alloc/liballoc.h>
#include <limits.h>
#include <m/status.h>
#include <m/system.h>
#include <stddef.h>
#include <stdint.h>
#include <string/string.h>
#define EXAMPLE 2
#if EXAMPLE == 1
#define MUTEX 2000
void app_thread1 (void);
int spawn (void (*fn) (void)) {
size_t stack_size = 256 * PAGE_SIZE;
void* stack = malloc (stack_size);
if (stack == NULL)
return -ST_OOM_ERROR;
uintptr_t stack_top = (uintptr_t)stack + stack_size;
return clone (stack_top, stack_size, fn);
}
void app_main (void) {
create_mutex (MUTEX);
spawn (&app_thread1);
lock_mutex (MUTEX);
for (int i = 0; i < 3; i++)
test ('a');
unlock_mutex (MUTEX);
}
void app_thread1 (void) {
lock_mutex (MUTEX);
for (int i = 0; i < 3; i++)
test ('b');
unlock_mutex (MUTEX);
quit ();
}
#elif EXAMPLE == 2
#define MUTEX 2000
void app_thread1 (void);
int spawn (void (*fn) (void)) {
size_t stack_size = 256 * PAGE_SIZE;
void* stack = malloc (stack_size);
if (stack == NULL)
return -ST_OOM_ERROR;
uintptr_t stack_top = (uintptr_t)stack + stack_size;
return clone (stack_top, stack_size, fn);
}
void app_main (void) {
create_mutex (MUTEX);
spawn (&app_thread1);
for (;;) {
lock_mutex (MUTEX);
for (int i = 0; i < 3; i++)
test ('a');
unlock_mutex (MUTEX);
}
}
void app_thread1 (void) {
for (;;) {
lock_mutex (MUTEX);
for (int i = 0; i < 3; i++)
test ('b');
unlock_mutex (MUTEX);
}
quit ();
}
#elif EXAMPLE == 3
#define MUTEX 2000
void app_thread1 (void);
int spawn (void (*fn) (void)) {
size_t stack_size = 256 * PAGE_SIZE;
void* stack = malloc (stack_size);
if (stack == NULL)
return -ST_OOM_ERROR;
uintptr_t stack_top = (uintptr_t)stack + stack_size;
return clone (stack_top, stack_size, fn);
}
void app_main (void) {
create_mutex (MUTEX);
spawn (&app_thread1);
for (;;) {
lock_mutex (MUTEX);
for (int i = 0; i < 3; i++)
test ('a');
quit ();
}
}
void app_thread1 (void) {
for (;;) {
lock_mutex (MUTEX);
for (int i = 0; i < 3; i++)
test ('b');
unlock_mutex (MUTEX);
}
quit ();
}
#endif