diff options
author | Freya Murphy <freya@freyacat.org> | 2025-04-28 11:09:43 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-04-28 11:09:43 -0400 |
commit | 103e9e001036dce5cd34209b62a416fd1f34abbf (patch) | |
tree | 4363f631c929f23b618c94f4d1a05ce51c4e6de8 /kernel/include | |
parent | add stderr (diff) | |
download | comus-103e9e001036dce5cd34209b62a416fd1f34abbf.tar.gz comus-103e9e001036dce5cd34209b62a416fd1f34abbf.tar.bz2 comus-103e9e001036dce5cd34209b62a416fd1f34abbf.zip |
move context save area to pcb not in stack
Diffstat (limited to 'kernel/include')
-rw-r--r-- | kernel/include/comus/cpu.h | 7 | ||||
-rw-r--r-- | kernel/include/comus/memory.h | 5 | ||||
-rw-r--r-- | kernel/include/comus/procs.h | 11 |
3 files changed, 20 insertions, 3 deletions
diff --git a/kernel/include/comus/cpu.h b/kernel/include/comus/cpu.h index 3669000..df8f44e 100644 --- a/kernel/include/comus/cpu.h +++ b/kernel/include/comus/cpu.h @@ -31,6 +31,13 @@ struct cpu_feat { }; struct cpu_regs { + // pgdir + uint64_t cr3; + // segments + uint16_t gs; + uint16_t fs; + uint16_t es; + uint16_t ds; // registers uint64_t r15; uint64_t r14; diff --git a/kernel/include/comus/memory.h b/kernel/include/comus/memory.h index 408521b..47ea103 100644 --- a/kernel/include/comus/memory.h +++ b/kernel/include/comus/memory.h @@ -104,6 +104,11 @@ void mem_ctx_free(mem_ctx_t ctx); void mem_ctx_switch(mem_ctx_t ctx); /** + * @returns the pgdir pointer in the memory ctx + */ +volatile void *mem_ctx_pgdir(mem_ctx_t ctx); + +/** * Allocates at least len bytes of memory starting at * physical address addr. Returned address can be * any virtural address. diff --git a/kernel/include/comus/procs.h b/kernel/include/comus/procs.h index 0150975..eb6c54f 100644 --- a/kernel/include/comus/procs.h +++ b/kernel/include/comus/procs.h @@ -15,8 +15,8 @@ #include <lib.h> #include <elf.h> -#define PCB_REG(pcb, x) ((pcb)->regs->x) -#define PCB_RET(pcb) ((pcb)->regs->rax) +#define PCB_REG(pcb, x) ((pcb)->regs.x) +#define PCB_RET(pcb) ((pcb)->regs.rax) #define PCB_ARG1(pcb) PCB_REG((pcb), rdi) #define PCB_ARG2(pcb) PCB_REG((pcb), rsi) #define PCB_ARG3(pcb) PCB_REG((pcb), rdx) @@ -47,8 +47,8 @@ enum proc_state { /// process control block struct pcb { // context - struct cpu_regs *regs; mem_ctx_t memctx; + struct cpu_regs regs; // metadata pid_t pid; @@ -224,4 +224,9 @@ void schedule(struct pcb *pcb); */ __attribute__((noreturn)) void dispatch(void); +/** + * Scheduler function called on every system tick + */ +void pcb_on_tick(void); + #endif /* procs.h */ |