summaryrefslogtreecommitdiff
path: root/kernel/asm.s
diff options
context:
space:
mode:
authorJake Mannens <jake72360@gmail.com>2018-07-11 05:38:01 +1000
committerJake Mannens <jake72360@gmail.com>2018-07-11 05:38:01 +1000
commit59cac783f5ba12a47308b05b87d5cfa769473a49 (patch)
tree35e14bb57fa7fdbaf1573f409c3289e1ddb9c0c1 /kernel/asm.s
parent99d16e98e04c73e108160d7d70244bafdb33b6fc (diff)
Modified the tick_handler interrupt routine in timer.s so that it no
longer calls reschedule() directly. It now calls sched_tick() so that the scheduler can make it's own decisions relating to handling the timer interrupt. The reschedule() function now *actually* implements a basic round-robin scheduling algorithm that iterates through the list of tasks. This is still a temporary algorithm but at least it now includes *all* runnable processes instead of switching back and forth between process 1 and 2.
Diffstat (limited to 'kernel/asm.s')
-rw-r--r--kernel/asm.s5
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/asm.s b/kernel/asm.s
index 0bf9067..6d35334 100644
--- a/kernel/asm.s
+++ b/kernel/asm.s
@@ -3,6 +3,7 @@ global switch_to
global set_tss
extern cstate
extern ctask
+extern ctaskn
extern gdt
extern save_state
@@ -27,9 +28,11 @@ switch_to:
ltr ax
; copy the saved state into the previous TSS
call save_state
- ; update ctask
+ ; update ctask and ctaskn
mov ebx, [ebp+12]
mov [ctask], ebx
+ mov ebx, [ebp+8]
+ mov [ctaskn], ebx
; calculate the task segment index and jump to it
mov ebx, [ebp+8]
add ebx, 5