xv6-k210 icon indicating copy to clipboard operation
xv6-k210 copied to clipboard

向调度器引入任务的概念

Open retrhelo opened this issue 3 years ago • 0 comments

在与@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,这可以进一步地加快调度的速度。

retrhelo avatar May 29 '21 03:05 retrhelo