feat: scheduler: implement schedule

This commit is contained in:
Paul Pan 2024-06-15 19:59:52 +08:00
parent ecb8b7a54f
commit 6565beef4c

View File

@ -1,6 +1,6 @@
use crate::objects::*; use crate::objects::*;
use core::ptr::NonNull; use core::ptr::NonNull;
use log::error; use log::{error, trace};
use spin::lazy::Lazy; use spin::lazy::Lazy;
use utils::linked_list::Link; use utils::linked_list::Link;
@ -40,20 +40,19 @@ impl Scheduler {
pub fn schedule(&self) { pub fn schedule(&self) {
while let Some(next) = self.head.next_mut() { while let Some(next) = self.head.next_mut() {
// TODO: also need to check whether it is schedulable if next.timetick() > 0 && next.schedulable() {
if next.timetick() > 0 { trace!("[Scheduler] Switch to {}, tick: {}", next.tid(), next.timetick());
// Available to run, activate it
next.activate(); next.activate();
} else if next.timetick() == 0 { } else if next.timetick() == 0 {
// No time left, refill time tick and move to the end of the queue
next.set_timetick(TIME_SLICE); next.set_timetick(TIME_SLICE);
} }
// put to the end of the queue // put to the end of the queue
// todo: only move blocked and time expired threads to the end if next.timetick() == 0 || !next.schedulable() {
next.link.detach(); next.link.detach();
self.head.prepend(next); self.head.prepend(next);
} }
}
error!("[Scheduler] No thread to schedule! Where is IDLE thread?"); error!("[Scheduler] No thread to schedule! Where is IDLE thread?");
} }