Linux 内核调度器 ③ ( sched_class 调度类结构体分析 | next 字段 | enqueue_task 函数 | dequeue_task 函数 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ;
以上是关于Linux 内核调度器 ③ ( sched_class 调度类结构体分析 | next 字段 | enqueue_task 函数 | dequeue_task 函数 )的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核CFS 调度器 ⑤ ( CFS 调度器类 fair_sched_class 源码 | next 赋值 | enqueue_task 赋值 | dequeue_task 赋值 )
Linux 内核线程调度示例一 ③ ( 获取线程优先级 | 设置线程调度策略 | 代码示例 )
Linux 内核实时调度类 ③ ( 实时调度类 rt_sched_class 源码 | 调度类 sched_class 源码 )
Linux 内核进程优先级与调度策略 ③ ( 设置获取线程优先级的核心函数 | 修改线程调度策略函数 )
Linux(内核剖析):08---进程调度之Linux调度算法(调度器类公平调度(CFS))
Linux 内核CFS 调度器 ⑥ ( CFS 调度器就绪队列 cfs_rq | Linux 内核调度实体 sched_entity | “ 红黑树 “ 数据结构 rb_root_cached )