[kernel Linux] classe de agendamento em tempo real ② (análise de código-fonte da entidade de agendamento em tempo real sched_rt_entity | run_list, timeout, watchdog_stamp, campos time_slice)





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_entityestrutura , no linux-5.6.18\include\linux\sched.hcabeç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_entityA estrutura representa o tipo "entidade de agendamento em tempo real" ;


1. campo run_list


sched_rt_entityO run_listcampo é 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_entityO timeoutcampo , utilizado para definir o timeout de agendamento ;

unsigned long			timeout;

3. campo watchdog_stamp


sched_rt_entityO watchdog_stampcampo usado para registrar o valor de jiffies;

unsigned long			watchdog_stamp;

4. campo time_slice


sched_rt_entityUm time_slicecampo , representando uma fatia de tempo;

unsigned int			time_slice;

5. campo de volta


sched_rt_entitybackCampos 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_entityO parentcampo , apontando para a classe pai "entidade de agendamento em tempo real";

struct sched_rt_entity		*parent;

7. campo rt_rq


sched_rt_entityO rt_rqcampo , 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_entityO my_qcampo 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_entitydo 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;

Acho que você gosta

Origin blog.csdn.net/han1202012/article/details/123871539
Recomendado
Clasificación