// TCB的字段, 用来保存任务的状态
#[derive(Copy, Clone, PartialEq)]
pub enum TaskStatus {
    UnInit,  // 未初始化
    Ready,  // 准备运行
    Running,  // 正在运行
    Exited,  // 已退出
}


// TCB的字段 用来保存cpu 在内核切换人物的时候 寄存器还有栈顶的信息, 这个结构体将来会传到 switch.S 中的汇编中
pub struct TaskContext{
    ra: usize,  // 保存了进行切换之后需要 跳转继续执行的地址
    sp: usize,  // 当前任务的内核栈的栈顶
    s: [usize; 12]  // 当前任务内核 有必要 保存的寄存器
}


// 一个任务的主体, 用来保存或者控制一个任务所有需要的东西
#[derive(Copy, Clone)]
pub struct TaskControlBlock {
    pub task_status: TaskStatus,
    pub task_cx: TaskContext,
}