xv6-k210
xv6-k210 copied to clipboard
向调度器引入任务的概念
在与@AtomHeartCoder讨论之后,我们认为可以在调度器中引入任务(Task)支持。任务控制块的一个草稿如下
struct task {
struct list _node; // 与链表有关的域
struct proc *process; // 指向自己的进程控制块
enum task_status status; // 当前任务的运行状态
int tid; // 类似于PID,当前任务的ID
struct context context; // 上下文,用于调度
struct trapframe *tf; // 用于中断时保护现场
}
任务基于进程,不同的任务之间可能属于同一个进程。而一个进程控制块中主要是包含了当前进程的地址空间信息(页表和segment链表),属于同一个进程的任务共享这些信息,所以在调度器在这些任务之间进行调度时就不需要刷新TLB,这可以进一步地加快调度的速度。