mirror of
https://github.com/sgmarz/osblog.git
synced 2024-11-28 04:13:31 +04:00
42 lines
980 B
Rust
42 lines
980 B
Rust
|
// sched.rs
|
||
|
// Simple process scheduler
|
||
|
// Stephen Marz
|
||
|
// 27 Dec 2019
|
||
|
|
||
|
use crate::process::{ProcessState, PROCESS_LIST};
|
||
|
|
||
|
pub fn schedule() -> usize {
|
||
|
unsafe {
|
||
|
if let Some(mut pl) = PROCESS_LIST.take() {
|
||
|
pl.rotate_left(1);
|
||
|
let mut frame_addr: usize = 0;
|
||
|
// let mut mepc: usize = 0;
|
||
|
// let mut satp: usize = 0;
|
||
|
// let mut pid: usize = 0;
|
||
|
if let Some(prc) = pl.front() {
|
||
|
match prc.get_state() {
|
||
|
ProcessState::Running => {
|
||
|
frame_addr =
|
||
|
prc.get_frame_address();
|
||
|
// satp = prc.get_table_address();
|
||
|
// pid = prc.get_pid() as usize;
|
||
|
},
|
||
|
ProcessState::Sleeping => {},
|
||
|
_ => {},
|
||
|
}
|
||
|
}
|
||
|
// println!("Scheduling {}", pid);
|
||
|
PROCESS_LIST.replace(pl);
|
||
|
if frame_addr != 0 {
|
||
|
// MODE 8 is 39-bit virtual address MMU
|
||
|
// I'm using the PID as the address space
|
||
|
// identifier to hopefully help with (not?)
|
||
|
// flushing the TLB whenever we switch
|
||
|
// processes.
|
||
|
return frame_addr;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
0
|
||
|
}
|