diff options
author | Danny Holman <dholman@gymli.org> | 2024-03-28 22:00:16 -0500 |
---|---|---|
committer | Danny Holman <dholman@gymli.org> | 2024-03-28 22:00:16 -0500 |
commit | db684b8653d93f4a374d8d692bb0afb31db67987 (patch) | |
tree | 83dc7939470b4c9302538fbf220c7a02fc249a51 /arch/i386/kernel | |
parent | 3b66779d9a8325c77c6cfbf1565885f98da5378f (diff) |
kernel: add a basic thread scheduler
Add a basic thread scheduler. This should allow the kernel to schedule
threads according to the round robin algorithm.
Signed-off-by: Danny Holman <dholman@gymli.org>
Diffstat (limited to 'arch/i386/kernel')
-rw-r--r-- | arch/i386/kernel/switch_thread.s | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/arch/i386/kernel/switch_thread.s b/arch/i386/kernel/switch_thread.s new file mode 100644 index 0000000..f1168d5 --- /dev/null +++ b/arch/i386/kernel/switch_thread.s @@ -0,0 +1,28 @@ +.global switch_thread +.type switch_thread, @function +switch_thread: + pushl %ebp + movl %esp, %ebp + + pushl %ebx + pushl %esi + pushl %edi + pushl %ebp + + movl 8(%ebp), %esi + movl 12(%ebp), %edi + + movl %esp, (%edi); + movl %cr3, %ecx + movl %ecx, 4(%edi) + + movl (%esi), %esp + movl 4(%esi), %ecx + movl %ecx, %cr3 + + popl %ebp + popl %edi + popl %esi + popl %ebx + popl %ebp + ret |