介绍
内核中针对task_struct进程描述符专门安排有序执行的模块叫调度器
调度器作用:
1 cpu中央处理器专门管理时间
2 通过进程优先级为依据专门分配时间
当在运行的过程中,某个进程的时间片到了或者缺少某个条件就会发生上下文切换,cpu重新切换一个进程。
调度类
1 调度类结构体sched_class:
内核中提供了一个专门用来调度的进程的类接口sched_class
在内核中,系统中有多个调度类,按调度优先级连接成链表。
kernel/sched/sched.h文件中
struct sched_class {
// 系统当中有多个调度类,按照调度优先级排成一个链表;下一个优先级的调度类
const struct sched_class *next;
// 将进程task_struct加入到执行队列当中,将调度实体(进程)存放到红黑树中,
// 并且对nr_running自动加1
void (*enqueue_task) (struct rq *rq, struct task_struct *p, int flags);
// 从执行队列当中删除进程,并且nr_running变量自动减1
void (*dequeue_task) (struct rq *rq, struct task_struct *p, int flags);
// 放弃cpu执行权,实际上该函数执行先出队后入队,在这种情况下,它直接将调度
//实体放在红黑树的最右端
void (*yield_task) (struct rq *rq);
bool (*yield_to_task) (struct rq *rq, struct task_struct *p, bool preempt);
// 用于检测当前进程是否可以被新的进程抢占
void (*check_preempt_curr) (struct rq *rq, struct task_struct *p,