Diretório de artigos
1. análise do código-fonte sched_rt_entity
O último blog [kernel Linux] classe de agendamento em tempo real ① (classificação de processo | processo em tempo real, processo comum | kernel Linux SCHED_FIFO, estratégia de agendamento SCHED_RR | entidade de agendamento em tempo real sched_rt_entity) apresenta o código-fonte da sched_rt_entity
estrutura , no linux-5.6.18\include\linux\sched.h
cabeçalho do arquivo de código-fonte do kernel Linux;
Vamos começar a analisar o sched_rt_entity
código-fonte da estrutura da entidade de agendamento em tempo real;
sched_rt_entity
A estrutura representa o tipo "entidade de agendamento em tempo real" ;
1. campo run_list
sched_rt_entity
O run_list
campo é usado para adicionar a "entidade de agendamento em tempo real" à fila de prioridade ;
struct list_head run_list;
2. campo de tempo limite
sched_rt_entity
O timeout
campo , utilizado para definir o timeout de agendamento ;
unsigned long timeout;
3. campo watchdog_stamp
sched_rt_entity
O watchdog_stamp
campo usado para registrar o valor de jiffies;
unsigned long watchdog_stamp;
4. campo time_slice
sched_rt_entity
Um time_slice
campo , representando uma fatia de tempo;
unsigned int time_slice;
5. campo de volta
sched_rt_entity
back
Campos da estrutura , usados para conectar "entidades de agendamento em tempo real" de cima para baixo;
struct sched_rt_entity *back;
6. campo pai
sched_rt_entity
O parent
campo , apontando para a classe pai "entidade de agendamento em tempo real";
struct sched_rt_entity *parent;
7. campo rt_rq
sched_rt_entity
O rt_rq
campo , indicando a " fila de execução em tempo real" à qual pertence a "entidade de agendamento em tempo real";
/* rq on which this entity is (to be) queued: */
struct rt_rq *rt_rq;
8. campo meu_q
sched_rt_entity
O my_q
campo representa a " fila de execução em tempo real" de propriedade da " entidade de agendamento em tempo real" , que é usada para gerenciar "subtarefas";
/* rq "owned" by this entity/group: */
struct rt_rq *my_q;
2. Resumo
Entidade de agendamento em tempo real Comentários sched_rt_entity
do código-fonte :
struct sched_rt_entity {
struct list_head run_list; // 用于将 " 实时调度实体 " 加入到 优先级队列 中的
unsigned long timeout; // 用于 设置 调度 超时时间
unsigned long watchdog_stamp; // 用于 记录 jiffies 的值
unsigned int time_slice; // 时间片
unsigned short on_rq;
unsigned short on_list;
struct sched_rt_entity *back; // 用于 由上到下 连接 " 实时调度实体 "
#ifdef CONFIG_RT_GROUP_SCHED
struct sched_rt_entity *parent; // 指向 父类 " 实时调度实体 "
/* rq on which this entity is (to be) queued: */
struct rt_rq *rt_rq; // 表示 " 实时调度实体 " 所属的 " 实时运行队列 "
/* rq "owned" by this entity/group: */
struct rt_rq *my_q; // 表示 " 实时调度实体 " 所拥有的 " 实时运行队列 " , 用于管理 " 子任务 "
#endif
} __randomize_layout;