1 /* 2 这个文件实现的是调度过程中设计到的时钟 3 */ 4 #[cfg(target_arch = "x86_64")] 5 use crate::{ 6 arch::{driver::tsc::TSCManager, CurrentTimeArch}, 7 time::TimeArch, 8 }; 9 10 pub struct SchedClock; 11 12 impl SchedClock { 13 #[inline] 14 pub fn sched_clock_cpu(_cpu: usize) -> u64 { 15 #[cfg(target_arch = "x86_64")] 16 { 17 if TSCManager::cpu_khz() == 0 { 18 // TCS no init 19 return 0; 20 } 21 return CurrentTimeArch::cycles2ns(CurrentTimeArch::get_cycles()) as u64; 22 } 23 24 #[cfg(target_arch = "riscv64")] 25 todo!() 26 } 27 } 28 29 bitflags! { 30 pub struct ClockUpdataFlag: u8 { 31 /// 请求在下一次调用 __schedule() 时跳过时钟更新 32 const RQCF_REQ_SKIP = 0x01; 33 /// 表示跳过时钟更新正在生效,update_rq_clock() 的调用将被忽略。 34 const RQCF_ACT_SKIP = 0x02; 35 /// 调试标志,指示自上次固定 rq::lock 以来是否已调用过 36 const RQCF_UPDATE = 0x04; 37 } 38 } 39