调度算法框架
struct sched_class {
// 调度类的名字
const char *name;
// 初始化run queue
void (*init)(struct run_queue *rq);
// 把进程放进run queue,这个是run queue的维护函数
void (*enqueue)(struct run_queue *rq, struct proc_struct *proc);
// 把进程取出run queue
void (*dequeue)(struct run_queue *rq, struct proc_struct *proc);
// 选择下一个要执行的进程
struct proc_struct *(*pick_next)(struct run_queue *rq);
// 每次时钟中断调用
void (*proc_tick)(struct run_queue *rq, struct proc_struct *proc);
};struct proc_struct {
// ...
// 表示这个进程是否需要调度
volatile bool need_resched;
// run queue的指针
struct run_queue *rq;
// 与这个进程相关的run queue表项
list_entry_t run_link;
// 这个进程剩下的时间片
int time_slice;
// 以下几个都和Stride调度算法实现有关
// 这个进程在优先队列中对应的项
skew_heap_entry_t lab6_run_pool;
// 该进程的Stride值
uint32_t lab6_stride;
// 该进程的优先级
uint32_t lab6_priority;
};最后更新于