Task scheduler

This commit is contained in:
2026-02-26 21:08:06 +00:00
parent 6658e4314b
commit d449150169
9 changed files with 836 additions and 62 deletions

44
context_switch.S Normal file
View File

@@ -0,0 +1,44 @@
/*
* context_switch.S cooperative context switch for x86_64
*
* void context_switch(UINT64 *old_rsp, UINT64 new_rsp);
*
* %rdi = pointer to save current RSP (old task's PCB field)
* %rsi = RSP value to restore (new task's saved RSP)
*
* Saves callee-saved registers and RFLAGS on the current stack,
* stores RSP, loads the new stack, restores registers, and returns
* into the new task's execution context.
*/
.text
.global context_switch
context_switch:
/* Save callee-saved registers and flags on the current stack */
pushq %rbp
pushq %rbx
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushfq
/* Save current stack pointer into *old_rsp */
movq %rsp, (%rdi)
/* Load new task's stack pointer */
movq %rsi, %rsp
/* Restore callee-saved registers and flags from the new stack */
popfq
popq %r15
popq %r14
popq %r13
popq %r12
popq %rbx
popq %rbp
ret
.section .note.GNU-stack,"",@progbits