【Linux 内核】调度器 ③ ( sched_class 调度类结构体分析 | next 字段 | enqueue_task 函数 | dequeue_task 函数 )


Linux 内核源码 linux-5.6.18\kernel\sched\sched.h 中 , 定义的 struct sched_class 调度类结构体 , 就是 " 调度器 " 对应的类 ;





一、next 字段 ( 指向链表中的下一个调度类 )



整个 Linux 系统中有 多个 " 调度类 " , 按照 优先级进行排序 , 这些 " 调度类 " 放在一个 " 链表 " 中 , 优先级高的 " 调度类 " 先执行 , 优先级低的后执行 ;

sched_class 调度类结构体 中的 next 字段 , 就是指向 " 调度类 " 链表 中的 下一个 " 调度类 " ; ( 优先级低于本调度类 )

const struct sched_class *next;

源码路径 : linux-5.6.18\kernel\sched\sched.h#1709 ;





二、enqueue_task 函数 ( 将进程加入执行队列 )



sched_class 调度类结构体 中的 enqueue_task 函数指针 , 指向一个函数 , 调用该函数 , 可以将 " 进程 " 加入到 " 执行队列 " 中 , 同时 nr_running 自增 1 1 1 ;

  • 进程 是一个 调度实体 ;
  • 执行队列 是一个 红黑树 ;
void (*enqueue_task) (struct rq *rq, struct task_struct *p, int flags);

源码路径 : linux-5.6.18\kernel\sched\sched.h#1715 ;





三、dequeue_task 函数 ( 从执行队列中删除进程 )



dequeue_task 调度类结构体 中的 dequeue_task 函数指针 , 指向一个函数 , 调用该函数 , 可以 从 " 执行队列 " 中删除 " 进程 " , 同时 nr_running 自减 1 1 1 ;

  • 进程 是一个 调度实体 ;
  • 执行队列 是一个 红黑树 ;
void (*dequeue_task) (struct rq *rq, struct task_struct *p, int flags);

源码路径 : linux-5.6.18\kernel\sched\sched.h#1716 ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值