Implement proc_spawn_thread syscall, fix proc_resume and proc_suspend
All checks were successful
Build documentation / build-and-deploy (push) Successful in 35s

This commit is contained in:
2026-01-16 00:26:37 +01:00
parent ebd9f0cac6
commit 711da8aeab
12 changed files with 219 additions and 51 deletions

View File

@@ -5,24 +5,41 @@
#include <string/string.h>
char c = 'a';
int mutex_rid;
void mythread (void) {
for (;;) {
proc_mutex_lock (mutex_rid);
for (size_t i = 0; i < 3; i++)
proc_test ('b');
proc_mutex_unlock (mutex_rid);
proc_sched ();
}
}
void make_thread (void* fn) {
size_t stack_pages = 256;
size_t stack_size = PAGE_SIZE * stack_pages;
uintptr_t out_paddr;
int mem_rid = proc_create_resource_mem (100, stack_pages, RV_PRIVATE, &out_paddr);
proc_map (out_paddr, PROC_MAP_BASE, stack_pages, PM_PRESENT | PM_RW | PM_USER);
memset ((void*)PROC_MAP_BASE, 0, stack_size);
uintptr_t vstack_top = PROC_MAP_BASE + stack_size;
proc_spawn_thread (vstack_top, stack_size, fn);
}
void app_main (void) {
uintptr_t out_paddr;
int mem_rid = proc_create_resource_mem (100, 16, RV_PRIVATE, &out_paddr);
mutex_rid = proc_create_resource_mutex (200, RV_PRIVATE);
proc_map (out_paddr, PROC_MAP_BASE, 16, PM_PRESENT | PM_RW | PM_USER);
make_thread (&mythread);
memset ((void*)PROC_MAP_BASE, 0, PAGE_SIZE * 16);
proc_unmap (PROC_MAP_BASE, 16);
proc_drop_resource (mem_rid);
proc_test ('a');
int mutex_rid = proc_create_resource_mutex (101, RV_PRIVATE);
proc_mutex_lock (mutex_rid);
proc_test ('b');
proc_mutex_unlock (mutex_rid);
for (;;) {
proc_mutex_lock (mutex_rid);
for (size_t i = 0; i < 3; i++)
proc_test ('a');
proc_mutex_unlock (mutex_rid);
proc_sched ();
}
}