use alloc::collections::VecDeque; use alloc::sync::Arc; use lazy_static::lazy_static; use crate::println; use crate::task::task::TaskControlBlock; use crate::task::UPSafeCell; /// 任务管理器 仅负责管理所有任务, 由ch4 TaskManager 拆分的, /// 先入先出的双端队列 pub struct TaskManager { ready_queue: VecDeque>, } impl TaskManager { pub fn new() -> Self { Self { ready_queue: VecDeque::new(), } } } impl TaskManager { // 添加一个任务到 队列中 pub fn add(&mut self, task: Arc) { self.ready_queue.push_back(task); } // 如果有任务, 弹出第一个任务 pub fn fetch(&mut self) -> Option> { self.ready_queue.pop_front() } } lazy_static! { // 全局的任务管理器 pub static ref TASK_MANAGER: UPSafeCell = unsafe { UPSafeCell::new(TaskManager::new()) }; } /// 给全局任务管理器添加任务 pub fn add_task(task: Arc) { TASK_MANAGER.exclusive_access().add(task); } // 全局任务管理器 弹出任务 pub fn pop_task() -> Option> { TASK_MANAGER.exclusive_access().fetch() }