summaryrefslogtreecommitdiffstats
path: root/arch/x86_64/proc/process.c
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2026-10-09 10:24:41 -0400
committerJon Santmyer <jon@jonsantmyer.com>2026-10-09 10:24:41 -0400
commitcc23ea5a4b38807e79aceb23e6f43e965926618f (patch)
tree90142bb44186f4dad7bbd82d3d53655b835c822b /arch/x86_64/proc/process.c
parent434ddcd907832b1febc7d70e4faa52109c7eb3bd (diff)
downloadjove-kernel-cc23ea5a4b38807e79aceb23e6f43e965926618f.tar.gz
jove-kernel-cc23ea5a4b38807e79aceb23e6f43e965926618f.tar.bz2
jove-kernel-cc23ea5a4b38807e79aceb23e6f43e965926618f.zip
add basic scheduler logic. rename init rootdir indexes
Diffstat (limited to 'arch/x86_64/proc/process.c')
-rw-r--r--arch/x86_64/proc/process.c52
1 files changed, 18 insertions, 34 deletions
diff --git a/arch/x86_64/proc/process.c b/arch/x86_64/proc/process.c
index d5513bc..5935303 100644
--- a/arch/x86_64/proc/process.c
+++ b/arch/x86_64/proc/process.c
@@ -1,4 +1,5 @@
#include "process.h"
+#include "hal/memory.h"
#include "proc/process.h"
#include "arch/x86_64/hal/obj.h"
#include "arch/x86_64/hal/smp.h"
@@ -8,51 +9,34 @@
#include "lib/string.h"
#include "proc/init.h"
#include "jove.h"
+#include "proc/scheduler.h"
PAGEALIGN uint8_t s_init_iopb[0x2000];
PAGEALIGN char _init_pcb_bytes[0x1000] = { 0 };
-pcb_t *pcb_tree;
+
+int
+_pcb_new_arch(pcb_t *pcb)
+{
+ return 0;
+}
void
processing_setup(void (*process_main))
{
- pcb_t *init_pcb = (pcb_t*)&_init_pcb_bytes;
- pcb_tree = init_pcb;
-
- memset(s_init_iopb, 0xFF, 0x2000);
- uintptr_t ksp = ((uintptr_t)&_init_pcb_bytes) + 0xFF8;
-
- init_pcb->header.tree_node.get_key = (void*)pcb_getpid;
- init_pcb->header.tree_node.color = 1;
- init_pcb->header.rootdir = _rootdir_obj;
- init_pcb->header.pagedir = obj_release(objdir_getlocal(_rootdir_obj, ROOTDIR_PAGEDIR_I));
+ jove_owned_obj_t *init_pcb_obj = objdir_getlocal(_rootdir_obj, INIT_ROOTDIR_PCB_I);
+ obj_settype(init_pcb_obj, JOVE_OBJ_PCB);
+ obj_setvalue(init_pcb_obj, phys_fromvirt((uintptr_t)&_init_pcb_bytes));
+
+ pcb_new(init_pcb_obj, sizeof(_init_pcb_bytes), _rootdir_obj);
- init_pcb->header.pid = 1;
- init_pcb->header.state = PCB_STATE_RUNNING;
-
- init_pcb->ksp = (void*)ksp;
-
- jove_owned_obj_t *iopb_obj = objdir_getlocal(_rootdir_obj, ROOTDIR_IOPB_I);
+ jove_owned_obj_t *iopb_obj = objdir_getlocal(_rootdir_obj, INIT_ROOTDIR_IOPB_I);
obj_settype(iopb_obj, JOVE_OBJ_IOPB);
obj_setvalue(iopb_obj, (uintptr_t)s_init_iopb);
- init_pcb->iopb = obj_release(iopb_obj);
- processor_t *proc = processor_current();
- proc->tss.rsp[0] = (uintptr_t)init_pcb->ksp;
- memcpy(proc->iopb, s_init_iopb, 0x2000);
-
- {
- jove_owned_obj_t *process_obj = objdir_getlocal(_rootdir_obj, ROOTDIR_PCB_I);
- obj_settype(process_obj, JOVE_OBJ_PCB);
- obj_setvalue(process_obj, (uintptr_t)init_pcb);
+ memset(s_init_iopb, 0xFF, 0x2000);
+ pcb_t *init_pcb = obj_deref(init_pcb_obj);
- proc->pcb_obj = process_obj;
- proc->pcb = init_pcb;
- }
+ init_pcb->iopb = obj_release(iopb_obj);
- __asm__ volatile("\
- movq %0, %%rsp; \
- xorq %%rbp, %%rbp; \
- jmpq %1"::
- "r"(init_pcb->ksp), "r"(process_main));
+ scheduler_init(init_pcb_obj, process_main);
}