Organize resources into process groups

This commit is contained in:
2026-01-27 14:18:05 +01:00
parent 67b66f2b39
commit 600886a7ee
20 changed files with 387 additions and 457 deletions

View File

@@ -8,25 +8,26 @@
static uintptr_t liballoc_map_base = PROC_MAP_BASE;
static int mem_rid_base = 1000000;
static int liballoc_mutex;
void liballoc_init (void) { create_mutex (LIBALLOC_MUTEX, RV_PRIVATE); }
void liballoc_init (void) { liballoc_mutex = create_mutex (LIBALLOC_MUTEX); }
void liballoc_deinit (void) { unlink_mutex (LIBALLOC_MUTEX, RV_PRIVATE); }
void liballoc_deinit (void) { unlink_mutex (liballoc_mutex); }
int liballoc_lock (void) { return lock_mutex (LIBALLOC_MUTEX, RV_PRIVATE); }
int liballoc_lock (void) { return lock_mutex (liballoc_mutex); }
int liballoc_unlock (void) { return unlock_mutex (LIBALLOC_MUTEX, RV_PRIVATE); }
int liballoc_unlock (void) { return unlock_mutex (liballoc_mutex); }
void* liballoc_alloc (int pages, int* mem_rid) {
uintptr_t current_base = liballoc_map_base;
*mem_rid = create_mem (mem_rid_base++, RV_PRIVATE, pages);
*mem_rid = create_mem (mem_rid_base++, pages);
if (*mem_rid < 0) {
return NULL;
}
if (map (*mem_rid, RV_PRIVATE, current_base, MAP_FLAGS | MAP_RW) < 0) {
unlink_mem (*mem_rid, RV_PRIVATE, pages);
if (map (*mem_rid, current_base, MAP_FLAGS | MAP_RW) < 0) {
unlink_mem (*mem_rid, pages);
return NULL;
}
@@ -38,7 +39,7 @@ void* liballoc_alloc (int pages, int* mem_rid) {
int liballoc_free (void* ptr, int pages, int mem_rid) {
unmap ((uintptr_t)ptr, pages);
unlink_mem (mem_rid, RV_PRIVATE, pages);
unlink_mem (mem_rid, pages);
return 0;
}

View File

@@ -15,28 +15,24 @@ int test (char c) { return do_syscall (SYS_TEST, c); }
int sched (void) { return do_syscall (SYS_SCHED, 0); }
int map (int mem_rid, int vis, uintptr_t vaddr, uint32_t flags) {
return do_syscall (SYS_MAP, mem_rid, vis, vaddr, flags);
int map (int mem_rid, uintptr_t vaddr, uint32_t flags) {
return do_syscall (SYS_MAP, mem_rid, vaddr, flags);
}
int unmap (uintptr_t vaddr, size_t pages) { return do_syscall (SYS_UNMAP, vaddr, pages); }
int create_mem (int mem_rid, int vis, size_t pages) {
return do_syscall (SYS_CREATE_MEM, mem_rid, vis, pages);
}
int create_mem (int mem_rid, size_t pages) { return do_syscall (SYS_CREATE_MEM, mem_rid, pages); }
int unlink_mem (int mem_rid, int vis, size_t pages) {
return do_syscall (SYS_UNLINK_MEM, mem_rid, vis, pages);
}
int unlink_mem (int mem_rid, size_t pages) { return do_syscall (SYS_UNLINK_MEM, mem_rid, pages); }
int clone (uintptr_t vstack_top, size_t stack_size, void (*entry) (void)) {
return do_syscall (SYS_CLONE, vstack_top, stack_size, entry);
}
int create_mutex (int mutex_rid, int vis) { return do_syscall (SYS_CREATE_MUTEX, mutex_rid, vis); }
int create_mutex (int mutex_rid) { return do_syscall (SYS_CREATE_MUTEX, mutex_rid); }
int unlink_mutex (int mutex_rid, int vis) { return do_syscall (SYS_UNLINK_MUTEX, mutex_rid, vis); }
int unlink_mutex (int mutex_rid) { return do_syscall (SYS_UNLINK_MUTEX, mutex_rid); }
int lock_mutex (int mutex_rid, int vis) { return do_syscall (SYS_LOCK_MUTEX, mutex_rid, vis); }
int lock_mutex (int mutex_rid) { return do_syscall (SYS_LOCK_MUTEX, mutex_rid); }
int unlock_mutex (int mutex_rid, int vis) { return do_syscall (SYS_UNLOCK_MUTEX, mutex_rid, vis); }
int unlock_mutex (int mutex_rid) { return do_syscall (SYS_UNLOCK_MUTEX, mutex_rid); }

View File

@@ -14,20 +14,17 @@
#define MAP_USER (1 << 2)
#define MAP_FLAGS (MAP_PRESENT | MAP_USER)
#define RV_PRIVATE 0
#define RV_PUBLIC 1
int quit (void);
int test (char c);
int sched (void);
int map (int mem_rid, int vis, uintptr_t vaddr, uint32_t flags);
int map (int mem_rid, uintptr_t vaddr, uint32_t flags);
int unmap (uintptr_t vaddr, size_t pages);
int create_mem (int mem_rid, int vis, size_t pages);
int unlink_mem (int mem_rid, int vis, size_t pages);
int create_mem (int mem_rid, size_t pages);
int unlink_mem (int mem_rid, size_t pages);
int clone (uintptr_t vstack_top, size_t stack_size, void (*entry) (void));
int create_mutex (int mutex_rid, int vis);
int unlink_mutex (int mutex_rid, int vis);
int lock_mutex (int mutex_rid, int vis);
int unlock_mutex (int mutex_rid, int vis);
int create_mutex (int mutex_rid);
int unlink_mutex (int mutex_rid);
int lock_mutex (int mutex_rid);
int unlock_mutex (int mutex_rid);
#endif // _LIBMSL_M_SYSTEM_H