Implement proc_spawn_thread syscall, fix proc_resume and proc_suspend
All checks were successful
Build documentation / build-and-deploy (push) Successful in 35s
All checks were successful
Build documentation / build-and-deploy (push) Successful in 35s
This commit is contained in:
49
init/init.c
49
init/init.c
@@ -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 ();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user