调度子系统3_周期调度器

本文详细介绍了Linux内核中的周期调度器工作原理,包括scheduler_tick函数的任务,如更新运行队列的clock、负载,处理进程运行时间更新,并触发负载平衡。此外,还解析了update_cpu_load函数如何更新队列负载以及calc_load_account_active函数如何计算系统负载,关注于就绪进程和不可中断睡眠进程的考量。
摘要由CSDN通过智能技术生成
//	周期调度器
//	调用路径:update_process_times->scheduler_tick
//	函数任务:
//		1.更新rq的clock
//		2.更新队列负载
//		3.通知调度器类更新进程运行时间
//		4.更新下一次load balance的时间戳
//		5.触发load balance
1.1 void scheduler_tick(void)
{
	int cpu = smp_processor_id();
	struct rq *rq = cpu_rq(cpu);
	//当前运行的进程
	struct task_struct *curr = rq->curr;
	raw_spin_lock(&rq->lock);
	//更新rq的clock
	update_rq_clock(rq);
	//更新队列负载
	update_cpu_load_active(rq);
	//更新进程的运行时间
	curr->sched_class->task_tick(rq, curr, 0);
	raw_spin_unlock(&rq->lock);

#ifdef CONFIG_SMP
	//更新下一次load balance的时间戳
	rq->idle_balance = idle_cpu(cpu);
	//触发load balance软中断
	trigger_load_balance(rq, cpu);
#endif
}


//	更新队列负载(rq->cpu_load[])
//		每scheduler tick(TICK_NSEC)被调用一次
//	函数任务:
//		1.更新rq负载
//			1.1 通过CPU_LOAD_IDX_MAX个项记录rq的历史负载信息
//			1.2 更新方法
//				cpu_load[0] = load.weight
//				cpu_load[1] = (cpu_load[1]   + load.weight)/2
//				cpu_load[2] = (cpu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值