其中的rt_rq和my_q字段 , 分别表示一个 " 实时运行队列 " , 是rt_rq结构体类型的 ; rt_rq结构体 , 定义在Linux内核源码linux-5.6.18\kernel\sched\sched.h头文件中 ; 代码语言:javascript 代码运行次数:0 运行 AI代码解释 /* Real-Time classes' related field in a runqueue: */struct rt_rq{struc...
那么该调度实体的优先级就是其进程组内中最高的优先级(rt_rq.highest_prio.curr)。 换句话说,每个调度实体,和rt_rq有两种关系: rt_se是rt_rq上的一个元素。rt_se的rt_rq字段就指向该优先级队列。 rt_se表示的是一个进程组,受到该进程组“管辖”的所有调度实体都在该rt_rq上受到管理。rt_se的my_q字段...
每个cpu上都有一个rq来管理此cpu上的cfs,rq及deadline调度,分别使用不同的rq类型管理 cfs_rq内部使用rb树关联se(se会关联task_struct或task_group),cfs_rq使用se的vruntime来管理其在rb树中的位置,每次挑选线程(se)时选择最小的vruntime任务执行 rt_rq使用queue管理对应的rq_se(se会关联task_struct或task_g...
rt_rq是Linux内核为实时进程设计的就绪队列,当然它是为实时调度类准备的就绪队列: AI检测代码解析 /* Real-Time classes' related field in a runqueue: */ struct rt_rq { struct rt_prio_array active; unsigned int rt_nr_running; unsigned int rr_nr_running; #if defined CONFIG_SMP || defined CON...
一、实时运行队列 rt_rq 源码 二、实时运行队列 rt_rq 结构体字段分析 1、active 字段 2、rt_nr_running 字段 3、curr 字段 4、next 字段 一、实时运行队列 rt_rq 源码 ...
(1) struct rq:运行队列,每个CPU都对应一个; (2) struct rt_rq:实时运行队列,用于管理实时任务的调度实体; (3) struct sched_rt_entity:实时调度实体,用于参与调度,功能与struct sched_entity类似; (4) struct task_group:组调度结构体; (5) struct rt_bandwidth:带宽控制结构体; ...
struct rt_rq:实时运行队列,用于管理实时任务的调度实体; struct sched_rt_entity:实时调度实体,用于参与调度,功能与struct sched_entity类似; struct task_group:组调度结构体; struct rt_bandwidth:带宽控制结构体; 老规矩,先上张图,捋捋这些结构之间的关系吧: ...
那么rt线程对应调度类的选核函数为select_task_rq_rt,其基本的执行逻辑如下图1: 图1 rt选核流程比较简单,其核心逻辑位于find_lowest_rq函数中,此函数主要用于寻找符合当前rt线程运行的cpu,其核心逻辑如下图2: 图2 cpupri_find_fitness负责从所有系统中所有的符合task运行条件的cpu找出来,并更新到lowest_mask里面...
struct rt_rq rt:RT调度队列 struct dl_rq dl:DL调度队列 cfs_rq:跟踪就绪队列信息以及管理就绪态调度实体,并维护一棵按照虚拟时间排序的红黑树。tasks_timeline->rb_root是红黑树的根,tasks_timeline->rb_leftmost指向红黑树中最左边的调度实体,即虚拟时间最小的调度实体。
那么rt线程对应调度类的选核函数为select_task_rq_rt,其基本的执行逻辑如下图1: 图1 rt选核流程比较简单,其核心逻辑位于find_lowest_rq函数中,此函数主要用于寻找符合当前rt线程运行的cpu,其核心逻辑如下图2: 图2 cpupri_find_fitness负责从所有系统中所有的符合task运行条件的cpu找出来,并更新到lowest_mask里面...